VC++,,,消息WM_CREATE和WM_PAINT的问题~~!!

...winmain(...){...::RegisterClassEx(&wndclass);HWNDhwnd=::CreateWindowEx();...//显示窗口... ... winmain(...)
{
...
::RegisterClassEx(&wndclass);
HWND hwnd = ::CreateWindowEx();
...
// 显示窗口,刷新窗口客户区
::ShowWindow(hwnd, nCmdShow);
//::UpdateWindow(hwnd);
...
}
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
char szText[] = "最简单的窗口程序!";
switch (message)
{
case WM_CREATE:
{
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hwnd,&ps);
TextOut(hdc,20,20,"CREATE",strlen("CREATE"));
ReleaseDC(hwnd,hdc);
return 0 ;
}
case WM_PAINT: // 窗口客户区需要重画
{
HDC hdc;
PAINTSTRUCT ps;

// 使无效的客户区变的有效,并取得设备环境句柄
hdc = ::BeginPaint (hwnd, &ps) ;
// 显示文字
::TextOut(hdc, 10, 10, szText, strlen(szText));
::EndPaint(hwnd, &ps);
return 0;
}
case WM_DESTROY: // 正在销毁窗口

// 向消息队列投递一个WM_QUIT消息,促使GetMessage函数返回0,结束消息循环
::PostQuitMessage(0) ;
return 0 ;
}

// 将我们不处理的消息交给系统做默认处理
return ::DefWindowProc(hwnd, message, wParam, lParam);
}

//==========================================================
我即使注销//::UpdateWindow(hwnd);。。。运行后也会显示WM_PAINT中的内容,而且不显示WM_CREATE中的。怎么回事。::CreateWindowEx调用难道还后会投递WM_PAINT消息???
文本控件不能预定义文本吗?
case WM_CREATE:
{ // 设置窗口的标题
::SetWindowText(hwnd, "最简陋的打字程序");
return 0;
}
::SetWindowText为什么可以预定义标题?
case WM_CREATE:
{
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hwnd,&ps);
::TextOut(hdc,20,20,"CREATE",strlen("CREATE"));
::EndPaint(hwnd, &ps);
//ReleaseDC(hwnd,hdc);
return 0 ;
}
这个却不可以吗?
展开
 我来答
nwnym
2010-11-03 · TA获得超过1.7万个赞
知道大有可为答主
回答量:3772
采纳率:100%
帮助的人:1837万
展开全部
你的WM_CREATE处理语句中,BeginPaint没有与EndPaint配套。

主要问题在于,WM_CREATE发送时,窗口还没有建立起来,你往上写东西根本就没有作用。
CreateWindowEx没有主动投递WM_PAINT,但随之而来的ShowWindow会。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式