五、显示及更新窗口 -- ShowWindow 函数
原型
Bool ShowWindow(
HWND hwnd, // 创建窗口后返回哪个窗口句柄。
int nCmdshow // 用来指定窗口显示状态。
);
nCmdShow 参数一般为:
SW_HIDE -- 隐藏并激活其他窗口 SW_SHOW --窗口原位置 以原来尺寸激活和显示窗口
SW_SHOWMAXIMIZED -- 激活窗口并将其最大化显示
SW_SHOWMINIMIZED -- 激活窗口并将其最小化显示
SW_SHOWNORMAL -- 激活并显示窗口 -- 窗口最小化或最大化状态 系统其恢复原来尺寸和大小。
更新窗口 -- updateWindow来刷新窗口
原型
Bool updateWindow(
HWHD hwndl;// 指创建成功后的窗口句柄
) updateWindow 函数通过发送一个WM_PAINT 消息来刷新窗口
updateWindow 将WM_PAINT消息直接发送给窗口过程函数进行处理,而没放到我们前面所说的消息队列中。
六、消息循环 -- GetMessage函数
原型:
Bool Getmessage(
LPMSG lpmsg, // 指向一个消息结构体 -- 将消息队列中信息保存在结构体对象中。
HWND hwnd, // 接收属于哪个窗口消息,通常设置NULL接收属于调用线程所有窗口的窗口消息
UINT WMsgFiltermin, // 获取消息最小值,设为0接收所有消息。
UINT WMsgFiltermax // 获取消息最大值,设为0接收所有消息。
);
GetMessage 接收除WM_QUIT外消息的非零值,对于WM_QUIT消息函数返回零,如果出现错误,
函数直接返回-1
MSG msg;
while (GetMessage(&msg,null,0,0))
{
Translatemessage(&msg); // 用于将虚拟键消息转换为字符消息
Dispatchmessage(&msg); // 分配一个消息到窗口过程,窗口过程函数对消息进行处理
}
七、编写窗口过程函
LRESULT CALLBACK WinSunProc(
HWND hwnd, // 窗口句柄
UINT uMsg, // 消息代码
WPARAM wParam, // 第一条消息参数
LPARAM lParam // 第二条消息参数
);
{
switch(uMsg)
{
case WM_CHAR: // 用户按下字符键时...收到WM_CHAR消息通过Translatemessage函数转换ASCII值。
char szChar[20];
sprintf(szChar,"char code is %d",wParam);
MessageBox(hwnd,szChar,"char",0);
break;
case WM_LBUTTONDOWN: // 接收窗口按下鼠标左键 会产生 WM_LBUTTONDOWN 消息.
MessageBox(hwnd,"mouse clicked","message",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"程序员之家",strlen("程序员之家"));
//ReleaseDC(hwnd,hdc);
break;
case WM_PAINT: // 对 WM_PAINT 消息进行处理。当窗口客户区部分或全部无效时,系统发生 WM_PAINT 消息
// 通知应用程序重新绘制窗口。
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"http://www.sunxin.org",strlen("http://www.sunxin.org"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE: // 用户点击关闭按钮时 系统会接收 WM_CLOSE
if(IDYES==MessageBox(hwnd,"是否真的结束?","message",MB_YESNO))
{
DestroyWindow(hwnd); // 当用户在对话框上选择 是时~~会调用DestroyWindow销毁窗口。
}
break;
case WM_DESTROY: // 要想让程序正常退出,必须响应 WM_DESTROY 消息~~并在消息代码中调用 PostQuitMessage 函数
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam); // 函数调用默认的窗口过程,对程序没有处理的其他消息提供默认处理。
}
责任编辑:小草