win32程序之窗口程序,以及消息机制

 

一丶简介

  通过上一讲.我们了解了窗口其实是绘制出来的.而且是不断绘制的过程. 所以窗口的本质是绘制. 但是我们现在看到的窗口程序.都可以点击关闭按钮. 使用鼠标点击会有反应.

而我们要怎么实现那. 

  其实鼠标点击是产生了一个消息.  window把这个消息封装成了消息结构体. 发送给了我们的窗口程序.  那么windows怎么知道你点击的那个窗口那?

是这样的. 当我们点击的时候. 会记录点击坐标.消息.等等. windows系统会接受到. 然后遍历内核中的WINOBJ结构. 而这个结构中存储着窗口对象. 窗口对象对应着消息线程.

所以windows一层一层的遍历.则找到了对应的窗口以及窗口对应的线程.然后发送给我们的应用程序. 

上面说的我们需要了解. 要知道消息怎么产生的. 怎么传递的.那么下面编程就明白了.

例如下图:

 

每个应用程序都有一个线程对象. 而这个线程对象如果创建窗口.那么内核中就有这个窗口对象.

如果我们有鼠标点击的消息.键盘消息等等.操作系统都会遍历窗口对象. 而窗口对象也会保存着创建这个窗口对象对应的线程对象. 而这个线程对象中则有消息队列.

这样的话操作系统则会封装消息发送给我们窗口对象.

二丶Wind窗口类结构.创建窗口程序.

1.进行窗口编程需要注意的问题

  在Windows中进行窗口编程.入口点已经改成WinMain了. 有四个参数.

如以下代码所示

复制代码
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,               //窗口的实例句柄 hinstance代表模块意思 HWND代表窗口意思. HANDLE代表内核对象. HDC 设备上下文.                      _In_opt_ HINSTANCE hPrevInstance,        //父窗口句柄.不需要.                      _In_ LPWSTR    lpCmdLine,                //命令行参数                      _In_ int       nCmdShow)                 //命令. 最大化命令.还是最小化命令. {        return 0; }
wWinMain  因为有UNICODE跟ASCII区别. 所以我是UNICODE使用wWinMain. A版本就是用WinMain
复制代码

2.进行Windows编程的调试手法

  在Windows中我们调试程序不能简单的使用printf进行调试.或者打印输出了. 我们可以使用两个API进行操作.

1.Sprintf() 格式化字符串. 

2.OutPutDebugString() 输出调试字符串.

具体两个API. 不再累赘.百度搜索即可.

因为OutPutDebugString() 只能打印固定字符串.所以使用sprintf进行格式化字符串.如下面代码.

复制代码
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,                      _In_opt_ HINSTANCE hPrevInstance,                      _In_ LPWSTR    lpCmdLine,                      _In_ int       nCmdShow) {        TCHAR str[30] = { NULL };     wsprintf(str,TEXT( "%s"),TEXT("HelloWin32"));      //因为是Unicode所以使用W版本.     OutputDebugStringW(str);     return 0; }
复制代码

我们编译出程序之后.可以使用DebugView这款工具查看.

 

3.窗口编程的步骤

1.创建窗口类. windows提供的窗口样式.我们需要给定.

2.注册窗口类.创建了窗口我们需要注册到windows系统中.

3.创建窗口.如果注册窗口成功.那么我们需要创建出来这个窗口.并且显示跟更新.

4.消息处理

4.窗口编程需要的主要结构

  窗口的创建Windows已经为我们提供了. 这个结构就是WNDCLASSEXW 结构

看下这个结构中的内容吧

复制代码
typedef 
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信