C语言消息处理的问题,WM_PAINT自动关闭窗口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言消息处理的问题,WM_PAINT自动关闭窗口相关的知识,希望对你有一定的参考价值。

C中建立窗口和消息循环,本人刚刚开始用,不太熟,请各位帮忙!
源代码:
#include<windows.h>

LRESULT CALLBACK WindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)

HDC hdc;
LPPAINTSTRUCT ss;
switch (uMsg)

case WM_DESTROY: //关闭窗口的时候结束进程
PostQuitMessage(0);
return 0;
case WM_PAINT: //重绘窗体的时候,就是这里出了问题
//加上这个窗口就闪一下自己关闭了,不加这句还蛮好的
//希望大神们帮小弟解释一下这是神马情况??

hdc = BeginPaint(hwnd,&ss);
TextOut(hdc,30,30,"Hello World",11);
EndPaint(hwnd,&ss);
return 0;


return DefWindowProc(hwnd,uMsg,wParam,lParam);


int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)

WNDCLASS wnd;
HWND hwin;
MSG msg;

wnd.cbClsExtra = 0;
wnd.cbWndExtra = 0;
wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wnd.hCursor = LoadCursor(NULL,IDC_ARROW);
wnd.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wnd.hInstance = hInstance;
wnd.lpfnWndProc = WindowProc;
wnd.lpszClassName = "sky";
wnd.lpszMenuName = NULL;
wnd.style = CS_HREDRAW | CS_VREDRAW;

if (!RegisterClass(&wnd)) //注册失败弹出失败提示

MessageBox(NULL,TEXT("报告长官!注册失败了!"),"Fail",MB_OK);
return 0;


hwin = CreateWindow("sky", //创建窗口并获得句柄
"Aloha~",
WS_OVERLAPPEDWINDOW,
100,100,400,500,
NULL,NULL,
hInstance,
NULL);

ShowWindow(hwin,nShowCmd); //显示窗体

while (GetMessage(&msg,NULL,0,0)) //建立消息循环

TranslateMessage(&msg);
DispatchMessage(&msg);

return msg.lParam;



还请各位给些实用的信息啊,在此谢过啦!

参考技术A LPPAINTSTRUCT ss; 把LP去掉

以上是关于C语言消息处理的问题,WM_PAINT自动关闭窗口的主要内容,如果未能解决你的问题,请参考以下文章

令人生疑的Windows窗口消息WM_PAINT详解

WM_PAINT消息详解,使用InvalidateRect或InvalidateRgn函数刻意产生WM_PAINT消息(WIN7里有变化,“调整视觉效果”,将“启用桌面组合”去掉)

窗口绘制有关的消息整理 WM_PAINT, WM_NCPAINT, WM_ERASEBKGND

WM_PAINT消息在窗口重绘的时候产生,那什么时候窗口会重绘(异步工作方式,效率更高,灵活性更强)

位图未在 Win32 C++ 中绘制

VC SDK中关于WM_PAINT的新手问题