创建一个基本的Windows应用程序
以下是包含的头文件
#define WIN32_LEAN_AND_MEAN // 指示编译器不要包含我们并不需要的MFC内容 #include <windows.h> // 包含所有的Windows头文件 #include <windowsx.h> // 含有许多重要的宏和常量的头文件 #include <stdio.h> #include <math.h> #define WINDOW_CLASS_NAME "WINCLASS1"
Windows的事件循环处理消息的机制如下图:
现在我们来编写事件处理程序,因为在编写主程序时会调用这个函数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { PAINTSTRUCT ps; //用于WM_PAINT HDC hdc; //处理设备上下文 switch(msg) { case WM_CREATE: { // 返回成功 return(0); } break; case WM_PAINT: { //绘画窗口 hdc = BeginPaint(hwnd,&ps); EndPaint(hwnd,&ps); return(0); } break; case WM_DESTROY: { //用于退出程序 PostQuitMessage(0); return(0); } break; default:break; } return (DefWindowProc(hwnd, msg, wparam, lparam)); }
以下是主程序
int WINAPI WinMain( HINSTANCE hinstance, //hinstance是应用程序的实例句柄 HINSTANCE hprevinstance, //该参数现在已经不使用的 LPSTR lpcmdline, //是一个空值终止字符串 int ncmdshow) //它在启动过程中被传递给应用程序,带有程序窗口的信息 { WNDCLASSEX winclass; // this will hold the class we create HWND hwnd; // generic window handle MSG msg; // generic message // first fill in the window class stucture winclass.cbSize = sizeof(WNDCLASSEX); winclass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; winclass.lpfnWndProc = WindowProc; winclass.cbClsExtra = 0; winclass.cbWndExtra = 0; winclass.hInstance = hinstance; winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); winclass.hCursor = LoadCursor(NULL, IDC_ARROW); winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); winclass.lpszMenuName = NULL; winclass.lpszClassName = WINDOW_CLASS_NAME; winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // register the window class if (!RegisterClassEx(&winclass)) return(0); // create the window if (!(hwnd = CreateWindowEx(NULL, // extended style WINDOW_CLASS_NAME, // class "Your Basic Window++", // title WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0,0, // initial x,y 400,400, // initial width, height NULL, // handle to parent NULL, // handle to menu hinstance,// instance of this application NULL))) // extra creation parms return(0); while(TRUE) { if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if (msg.message == WM_QUIT) break; TranslateMessage(&msg); // 发送消息给WindowProc DispatchMessage(&msg); } } return(msg.wParam); }