解决方案 »
- 如果微软开源了,linux还争的过微软吗?
- 关于MFC中自绘SliderCtrl控件的问题。
- VC断点调试的问题
- 高手指点time函数问题
- 是否可以改变CRectTracker在显示状态下的颜色?
- 一个外国人写的ftp服务器代码
- 初学者的若干问题???
- getadaptersinfo总是出错(按照msdn的方法)
- 大家帮帮忙,明天就要交的问题,谢谢了!
- 有关拨号时 modem 超时设置的问题 和 判断数据传输问题 100分,急
- 用ado来新建一个excel文件,不需要任何设置就是一个空的excel就行
- 请教各位,SDI静态拆分窗口后(accelerator)加速键不起作用,这是VC的BUG吗?
有一个当前活动对象的概念。 当前操作对象是某个程序,输入消息就会被发送到这个程序。
每个程序自己的消息队列,只不过是一个
while( GetMessage(...) )
{
}
你的程序完全可以忽略windows发送过来的消息。
========================================
其实这个说法本身是有问题的,因为消息队列并不是一个进程一个,而是每一个有需要的线程会被创建一个消息队列。 我现在的困惑是,当有若干个应用程序存在时,就会有若干个消息队列存在。这时,Windows是如何知道要把消息传到哪个消息队列中?
================================
消息队列应该是有由系统维护的,你可以想像成有一个由系统维护的队列链表,通过消息接收的窗口等信息,系统很容易定位到具体的队列。
#include "stdafx.h"bool Init(HINSTANCE);
LRESULT CALLBACK WNDPROC_OPTION(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:if(!Init(hModule)){MessageBox(NULL,(LPCWSTR)("无法初始化游戏选项!"),NULL,MB_OK);return false;}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}bool Init(HINSTANCE hInstance)
{
WNDCLASSEX wndClass;
wndClass.cbClsExtra=0;
wndClass.cbSize=sizeof(WNDCLASSEX);
wndClass.cbWndExtra=0;
wndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wndClass.hCursor=LoadCursor(hInstance,IDC_ARROW);
wndClass.hIcon=NULL;
wndClass.hIconSm=NULL;
wndClass.hInstance=hInstance;
wndClass.lpfnWndProc=WNDPROC_OPTION;
wndClass.lpszClassName=(LPCWSTR)("option");
wndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClassEx(&wndClass); HWND hWnd=CreateWindow((LPCWSTR)("option"),(LPCWSTR)("游戏选项"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,640,480,NULL,NULL,hInstance,NULL);
if(!hWnd)
return false;
ShowWindow(hWnd,SW_SHOWDEFAULT);
UpdateWindow(hWnd); MSG msg;
while(GetMessage(&msg,hWnd,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return true;
}LRESULT CALLBACK WNDPROC_OPTION(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;
}