//--------------------------------------------------------------------------- #include//=========================================================================== long __stdcall WndProc(HWND hwnd,UINT msg,WPARAM WParam,LPARAM LParam) { switch(msg) { case WM_CLOSE: PostQuitMessage(0); break; case WM_LBUTTONDOWN: MessageBoxA(0,"ok","提示",0); PostQuitMessage(0); break; case WM_PAINT: { HDC hdc; hdc = GetDC(hwnd); RECT rect; GetClientRect(hwnd,&rect); rect.left = rect.right/2; rect.top = rect.bottom/2; rect.right = rect.left+50; rect.bottom = rect.top+30; DrawText(hdc,"hello",5,&rect,0); ReleaseDC(NULL,hdc); } default: return DefWindowProc(hwnd,msg,WParam,LParam); } return 0; } WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreHinstance, LPSTR, int) { g_hIns = hInstance; WNDCLASS theClass ={0}; char * lpszClassName = "myClass"; char * lpszTitle = "测试窗口"; HWND hwnd; MSG msg; theClass.style = 0;//缺省窗口风格 theClass.lpfnWndProc = WndProc; theClass.cbClsExtra = 0;//窗口类无扩展 theClass.cbWndExtra = 0;//窗口实例无扩展 theClass.hInstance = hInstance; //窗口的最小化图标为缺省图标,即窗口左上角图标 //VC中资源ID为IDI_APPLICATION //在BCB中资源名为MAINICON theClass.hIcon=LoadIcon(hInstance,"MAINICON"); theClass.hCursor=LoadCursor(NULL,IDC_ARROW); //窗口采用箭头光标 theClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH)); //窗口背景为白色 theClass.lpszMenuName=NULL; //窗口无菜单 theClass.lpszClassName= lpszClassName; //窗口类名为"窗口" if(!RegisterClass(&theClass)) //如果注册失败 发出警告 { MessageBeep(0); return FALSE; } hwnd=CreateWindow( lpszClassName, //窗口类名 lpszTitle, //窗口标题名 WS_OVERLAPPEDWINDOW, //窗口的风格 CW_USEDEFAULT, //窗口左上角坐标值为缺省值 CW_USEDEFAULT, 500, 300, //窗口的宽和高 NULL, //此窗口无父窗口 NULL, //此窗口无子菜单 hInstance, //创建此窗口的应用程序的当前句柄 NULL //不使用该值 ); ShowWindow(hwnd,SW_SHOW); UpdateWindow(hwnd); while(true) { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if (msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } // if (GetMessage (&msg, NULL, 0, 0)) // { // TranslateMessage (&msg) ; // DispatchMessage (&msg) ; // } // else // break; } return msg.wParam; //消息循环结束 即程序结束时 将信息返回系统 }
PeekMessage与GetMessage函数处理不相同,两种方式都可以.PeekMessage是不阻塞的,GetMessage是线程阻塞的,内部处理退出消息,所以不用判断退出消息,关闭时,就跳到break结束循环。要在WM_PAINT消息中绘图,可用如下代码:
在阜南等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、网站制作 网站设计制作定制设计,公司网站建设,企业网站建设,成都品牌网站建设,营销型网站,成都外贸网站建设,阜南网站建设费用合理。PAINTSTRUCT ps ={0}; HDC hdc = BeginPaint(hwnd,&ps); //HPEN hPen = GetStockObject(WHITE_PEN); HPEN hPen = CreatePen(PS_DASHDOTDOT,1,RGB(255 , 0 , 0 )); HGDIOBJ oldPen = (HGDIOBJ)SelectObject(hdc,hPen); if(!oldPen) { int err = GetLastError(); char buff[20]={0}; itoa(err,buff,10); OutputDebugStringA(buff); } //画矩形 Rectangle(hdc,20,30,80,120); //画线 MoveToEx ( hdc , 20 , 10 , NULL ); LineTo( hdc , 200 ,100); SelectObject(hdc, oldPen); DeleteObject(hPen); EndPaint(hwnd,&ps);
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。