创建一个基本的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);

} 

原文地址:https://www.cnblogs.com/zjzsky/p/3402291.html