Windows编程学习笔记(一)
Windows 编程学习笔记
学习C++也有一段时间了,一直想学习Windows编程,可是每次都被些无聊的事情耽误了,还有就是自己的毅力太不坚定了,好几次学到一半就荒废了,结果到现在,WIN编程、MFC、Linux、Python全部处于一知半解的阶段,这个样到研究生还不得让人笑死…..现在正好是寒假,也是考研之前的最后一个寒假了,时间还算比较充裕,所以要下定狠心把windows编程系统的学习以下。学习资料主要就是windows的入门级书:大名鼎鼎的《Windows programming》,大而全,很适合初学,有要的朋友可以给我发邮件,我这有中文翻译的。这里有些东西是总结的,有些东西的拷贝的。下面就开始了!
第一章 窗口和消息
第一个程序毫无疑问是编程界的当家花旦 hello world!了,我用的是vs2005+vi,可能和书上的代码有冲突,但都是些小问题。
有几个重要的windows函数:
LoadIcon 加载图标供程序使用。
LoadCursor 加载鼠标光标供程序使用。
GetStockObject 取得一个图形对象(在这个例子中,是取得绘制窗口背景的画刷对象)。
RegisterClass 为程序窗口注册窗口类别。
ShowWindow 在屏幕上显示窗口。
UpdateWindow 指示窗口自我更新。
GetMessage 从消息队列中取得消息。
TranslateMessage 转译某些键盘消息。
DispatchMessage 将消息发送给窗口消息处理程序。
GetClientRect 取得窗口显示区域的大小
PostQuitMessage 在消息队列中插入一个「退出程序」消息。
DefWindowProc 执行内定的消息处理
在windows中又有了新的概念:句柄。暂时个人的理解是一个句柄能在程序中代表一个对象。有点像C语言的指针一样,能标志一个对象的存在。
Windows的命名机制要记牢,因为这时windows的最基础、最常用的功能:
CS 窗口类别样式
CW建立窗口
DT绘制文字
IDI图示ID
IDC游标ID
MB消息框
SND声音
WM窗口消息
WS窗口样式
/******************************************/
每个windos程序都会维护一个消息循环队列:
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
WM_PAINT消息:
对WM_PAINT的处理几乎总是从一个BeginPaint呼叫开始:
hdc = BeginPaint (hwnd, &ps) ;
而以一个EndPaint呼叫结束:
EndPaint (hwnd, &ps) ;
WM_DESTROY消息:
用下面的函数来响应销毁消息
PostQuitMessage (0) ;
/**************************************************/
队列化消息与非队列化消息
Windows处理消息的方式有两种:
1. 队列化消息,就是上面说得程序的消息队列,比如WM_PAINT,WM_DESTORY,WM_SIZE,等消息都是由他处理的。
2. 非队列化消息,就是windows能随时处理的消息,也就是对应的消息处理程序,比如一个About窗口AboutProc(HWND,UINT,WPARAM,LPARAMA),这些消息处理函数都用CALLBACK标识符加以表示,
第一章总结:主要介绍了windows程序的主要处理过程以及几个函数,感觉和Qt相比,Qt的信号/槽机制要比Windows的消息处理机制更加灵活,可以一个Qt的信号和槽是多对多的关系,如果用Windows来实现相同的功能,可能会麻烦很多,当然这不是绝对的,windows消息机制也有很多令人满意称赞的好处,功能的强大。