2017.9.25 MFC<1

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)