Windows编程学习笔记(一)

Windows 编程学习笔记

学习C++也有一段时间了,一直想学习Windows编程,可是每次都被些无聊的事情耽误了,还有就是自己的毅力太不坚定了,好几次学到一半就荒废了,结果到现在,WIN编程、MFCLinuxPython全部处于一知半解的阶段,这个样到研究生还不得让人笑死…..现在正好是寒假,也是考研之前的最后一个寒假了,时间还算比较充裕,所以要下定狠心把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消息机制也有很多令人满意称赞的好处,功能的强大。

原文地址:https://www.cnblogs.com/lvpengms/p/1662796.html