VC疑惑

 今天看人家的源代码(一个大型系统),当然源代码是可以运行的,发现了在CWnd的子类里面的Create函数里面调用了一个CWnd::CreateEx(NULL,…),发现了窗口类名居然传递了一个NULL,想到看过的CWnd源代码,想起了CWnd::CreateEx()函数里面调用了SDK的函数CreateWindow,这样说明了CreateWindow函数接受了一个NULL,觉得有点奇怪,然后打开了一个工程测试了一下,代码如下:

       int APIENTRY WinMain(HINSTANCE hInstance,

                     HINSTANCE hPrevInstance,

                     LPSTR     lpCmdLine,

                     int       nCmdShow)

{

      // TODO: Place code here.

       HWND hwnd=::CreateWindowEx(0,NULL,"测试",0,0,0,800,600,NULL,NULL,hInstance,NULL);

       ::ShowWindow(hwnd,SW_SHOW);

       ::UpdateWindow(hwnd);

       MSG msg;

       while(::GetMessage(&msg,hwnd,0,0))

       {

              ::TranslateMessage(&msg);

              ::DispatchMessage(&msg);

       }

       return 0;

}

发现这段代码可以运行,但是看不到任何的窗口,但是在任务管理器里面有进程在运行,也就说应用程序在进行消息循环,那么消息循环的窗口函数在什么地方呢?求高手解释一下。

       猜想:操作系统维护了一个全局的消息队列,所有的消息都经过这个消息处理函数的一些传递到应用程序的消息函数,应用程序的消息函数再将消息传递给各个窗口,然后响应消息。不知对否,求高手解释一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值