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);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,651评论 1 118
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,472评论 0 35
  • 史上最全的iOS面试题及答案 迷途的羔羊--专为路痴量身打造的品牌。史上最精准的定位。想迷路都难!闪电更新中......
    南虞阅读 1,567评论 0 8
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 2,046评论 0 12
  • 文/宁夏初开 妈妈 是世上最温柔的花儿 在狂风暴雨中 流着泪微笑 透过她的泪珠 映着孩子的叛逆与不羁 写满青春的日...
    宁夏初开阅读 345评论 13 18