美文网首页
2017.9.25 MFC<1

2017.9.25 MFC<1

作者: 张正戈hg | 来源:发表于2017-09-25 16:09 被阅读0次

    Windows程序的内部运行原理

    学习了MFC的一些理论性知识和实际的操作应用!

    以下是理论知识:

    char:是ANSI字符的数据类型

    wchar_t:是Unicode字符的数据类型

    TCHAR:同时支持两种字符串

    LPSTR:即 char *,指向以'/0'结尾的8位(单字节)ANSI字符数组指针

    LPWSTR:即wchar_t *,指向'/0'结尾的16位(双字节)Unicode字符数组指针?

    LPCSTR:即const char *

    LPCWSTR:即const wchar_t *?

    LPTSTR:LPSTR与LPWSTR两者二选一,取决于是否宏定义了UNICODE或ANSI

    LPCTSTR:?LPCSTR与LPCWSTR两者二选一,取决于是否宏定义了UNICODE或ANSI,如下是从MFC库中拷来的:

    Windows程序设计是一种事件驱动的程序设计方法。主要是基于消息的。当用户需要完成某种功能时,会调用操作系统的某种支持,操作系统将用户的需要包装成某种消息,并投递到消息队列当中。然后利用应用程序从消息队列中取走消息并进行响应

    消息循环的处理过程

    MSG  msg;

    While (GetMessage(&msg,NULL, 0,0))

    {  TranslateMessage(&msg);

    DispatchMessage(&msg);

    }

    (1) GetMessage()函数不断侦察应用程序的消息队列,若队列为空,则该函数一直运行,不返回;一旦发现队列不为空,便取出一条消息,把它复制到msg结构变量中,同时该函数返回TRUE。

    (2) 得到消息msg后,TranslateMessage()把来自键盘的命令翻译成WM_XXX消息命令形式。

    (3) DispatchMessage()函数通知Windows把每个消息分发给相应的窗口函数。应用程序并不直接调用窗口函数,而由Windows根据消息去调用窗口函数,因此,窗口函数经常被称为回调函数。

    Windows32应用程序开发过程

    1创建应用程序

    2编写WinMain 函数

    窗口的创建

    (1)设计一个窗口类

    (2)注册窗口类

    (3)创建窗口实例

    (4)显示及更新窗口

    应用程序的消息循环处理

    MSG  msg;

    While (GetMessage(&msg,NULL, 0,0))

    {  TranslateMessage(&msg);

    DispatchMessage(&msg);

    }

    定义窗口类的结构

    typedef struct _WNDCLASS { �UINT style;            //窗口类的风格

    �WNDPROC lpfnWndProc; //窗口处理函数

    �int cbClsExtra;      //窗口类附加数据大小

    �int cbWndExtra;    //窗口附加数据大小

    �HANDLE hInstance; //当前应用程序的实例句柄

    �HICON hIcon;      //窗口图标

    HCURSOR hCursor;          //窗口的鼠标

    �HBRUSH hbrBackground; //窗口的背景画刷

    �LPCTSTR lpszMenuName; //菜单

    �LPCTSTR lpszClassName; //窗口类名称

    } WNDCLASS;

    (2)窗口类的注册

    一个窗口,在创建之前需要先向操作系统进行注册,这类似现实生活中我们开公司,要先向工商局进行注册一样。

    ?我们通过RegisterClassEx()这个API将窗口类在操作系统中进行注册,并通过其返回值判断是否注册成功。

    窗口注册

    if ( !RegisterClass(&wndclass) )

    {

    //消息对话框

    MessageBox(NULL, _T(“注册窗口类失败!”), _T(“错误信息”), MB_ICONERROR);

    return 0;

    }

    (3)窗口的创建API

    HWND?hWnd?=?CreateWindow(

    _T(“MyWindowClass”),       //窗口类名称

    _T(“Window API编程”),                  //窗口名称,窗口标题

    WS_OVERLAPPEDWINDOW,      //窗口类型

    CW_USEDEFAULT, ? //窗口的左上角X坐边

    CW_USEDEFAULT,? //窗口的左上角X坐边

    CW_USEDEFAULT, ?//窗口的宽度

    CW_USEDEFAULT,? //窗口的高度

    NULL,? //父窗口句柄

    NULL, //窗口菜单句柄

    hInstance, //应用程序的实例句柄

    NULL  //创建的参数,一般为NULL

    );

    (4)窗口的显示与更新

    窗口的显示与更新

    ShowWindow(hwnd,SW_SHOW);

    UpdateWindow(hwnd);

    MFC中CString字符串类

    1.CString 类对象的初始化:

    CString str;

    CString str1(_T(“HelloWorld "));

    CString str2 = _T(“HelloWorld");

    2.取字符串长度成员函数:GetLength();

    CString str(_T("abc"));  int len = str.GetLength(); //len == 3

    3.字符串的连接:+、+=

    CString str(_T("abc"));

    str = _T("de") + str + _T("kp"); //str == deabckp

    TCHAR szBuf[] = _T("789");

    str += szBuf; //str == deabckp123789

    4.去除空格成员函数: Trim();

    CString str (_T(“    HelloWorld    "));      str1.Trim();

    5.字符串的比较:==、!=

    CString str1(_T("abc"));    CString str2 = _T("aBc");

    if (str1 == str2)

    MessageBox(_T("str1 等于 str2"));

    else

    MessageBox(_T("str1 不等于 str2"));

    6. CString 对象类型的转换:

    格式化字符串:Format 方法,实现从 int、long 等数值类型、TCHAR、TCHAR * 等类型向 CString 类型的转换;

    int num = 6;      CString str;      str.Format(_T("%d"), num);

    CString 类型向 int 等数值类型

    CString str1(_T("123"));      int num = _ttoi(str1);

    相关文章

      网友评论

          本文标题:2017.9.25 MFC<1

          本文链接:https://www.haomeiwen.com/subject/ixrdextx.html