创建一个Windows窗体

时间:2023-03-08 15:36:28
创建一个Windows窗体

20140702加:

WS_OVERLAPPEDWINDOW这个属性如果写成WS_OVERLAPPED,则窗口没有最大最小按钮以及左边的系统的菜单。

vs2010下的代码提示快捷键:CTRL + J

step:

窗口类赋值(12个参数)

注册窗口类

创建窗口

消息循环

#include<Windows.h>
#include<tchar.h> LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
const TCHAR pClassName[] = _T("MyWindow");
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.cbClsExtra = ;
wcex.cbWndExtra = ;
wcex.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);
wcex.hCursor = ::LoadCursor(NULL, IDC_ARROW);
wcex.hIcon = ::LoadIcon(NULL, IDI_APPLICATION);
wcex.hIconSm = ::LoadIcon(NULL, IDI_APPLICATION);
wcex.hInstance = hInstance;
wcex.lpfnWndProc = WindowProc;
wcex.lpszClassName = pClassName;
wcex.lpszMenuName = NULL;
wcex.style = CS_HREDRAW | CS_VREDRAW;
BOOL bRet = ::RegisterClassEx(&wcex);
if(!bRet)
{
MessageBox(NULL, _T("提示"), _T("注册窗口类失败"), MB_OK);
return FALSE;
}
HWND hWnd = ::CreateWindowEx(, pClassName, _T("WinDemo"), WS_VISIBLE|WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL); if(NULL == hWnd)
{
MessageBox(NULL, _T("提示"), _T("创建窗口失败!"), MB_OK);
return FALSE;
}
::ShowWindow(hWnd, SW_SHOW);
::UpdateWindow(hWnd); MSG msg;
while(GetMessage(&msg, NULL, , ))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
return TRUE;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_CLOSE:
::DestroyWindow(hwnd);
return ;
case WM_DESTROY:
::PostQuitMessage();
return ;
default:
break;
}
return ::DefWindowProc(hwnd,uMsg,wParam,lParam);
}