第一种: CreateWindow
#include <Windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
static TCHAR szAppName[] = TEXT("MyFirst WinForm");
HWND hWnd;
MSG Msg;
WNDCLASS wndClass;
wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = WndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInstance;
wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = szAppName;
if(!RegisterClass(&wndClass))
{
MessageBox(NULL, L"创建窗口失败!", L"提示", MB_ICONERROR | MB_OK);
return 0;
}
hWnd = CreateWindow(
szAppName,
L"Hello World",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
ShowWindow(hWnd, nShowCmd);
UpdateWindow(hWnd);
while(GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
// TODO 暂时什么也不干
switch(Msg)
{
case WM_CLOSE:
if( IDNO == MessageBox(NULL, L"确定退出吗?", L"提示", MB_ICONQUESTION | MB_YESNO) )
{
return 0;
}
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, Msg, wParam, lParam);
}
第二种: DialogBox
#include <Windows.h>
#include "resource.h"
LRESULT CALLBACK DialogProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
DialogBox(hInstance, (LPCTSTR)IDD_DIALOG, NULL, (DLGPROC)DialogProc);
}
LRESULT CALLBACK DialogProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch(Msg)
{
case WM_COMMAND:
switch (LOWORD(wParam))
{
//这里屏蔽了确定按钮关闭窗口的功能
case IDOK:
//EndDialog(hDlg, 0);
MessageBox(NULL, "我不想让你关闭窗口", "提示", MB_ICONINFORMATION | MB_OK);
//记得一定要是return哦, 而不是break
return 0;
default:
break;
}
case WM_CLOSE:
EndDialog(hDlg, 0);
return 0;
}
//return DefDlgProc(hDlg, Msg, wParam, lParam);
return 0;
}