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

  • 相关阅读:
    c++ 模板<template class T>
    HTML Agility Pack 搭配 ScrapySharp,彻底解除Html解析的痛苦
    用1年的经验做了10年还是,用10年的经验做一件事.
    last_inset_id()mysql注意
    小心变成这样一个人!!!
    主动哥
    转:开个小书店。。呵呵
    mysql 更改主键信息
    磁盘预录
    评估项目
  • 原文地址:https://www.cnblogs.com/zjzsky/p/3402291.html
Copyright © 2020-2023  润新知