zoukankan      html  css  js  c++  java
  • a window

      1 //Include necessary Headers//
      2 #include <windows.h>
      3 
      4 //Define variables/constants//
      5 LPCTSTR WndClassName = L"firstwindow";    //Define our window class name
      6 HWND hwnd = NULL;    //Sets our windows handle to NULL
      7 
      8 const int Width  = 800;    //window width
      9 const int Height = 600;    //window height
     10 
     11 //Functions//
     12 bool InitializeWindow(HINSTANCE hInstance,    //Initialize our window
     13                       int ShowWnd,
     14                       int width, int height,
     15                       bool windowed);
     16 
     17 int messageloop();    //Main part of the program
     18 
     19 LRESULT CALLBACK WndProc(HWND hWnd,    //Windows callback procedure
     20                          UINT msg,
     21                          WPARAM wParam,
     22                          LPARAM lParam);
     23 
     24 int WINAPI WinMain(HINSTANCE hInstance,    //Main windows function
     25                    HINSTANCE hPrevInstance, 
     26                    LPSTR lpCmdLine,
     27                    int nShowCmd)
     28 {
     29     //Initialize Window//
     30     if(!InitializeWindow(hInstance, nShowCmd, Width, Height, true))
     31     {
     32         //If initialization failed, display an error message
     33         MessageBoxW(0, L"Window Initialization - Failed",
     34             L"Error", MB_OK);
     35         return 0;
     36     }
     37 
     38     messageloop();    //Jump into the heart of our program
     39 
     40     return 0;
     41 }
     42 
     43 bool InitializeWindow(HINSTANCE hInstance,    //Initialize our window
     44                       int ShowWnd,
     45                       int width, int height,
     46                       bool windowed)
     47 {
     48     //Start creating the window//
     49 
     50     WNDCLASSEX wc;    //Create a new extended windows class
     51 
     52     wc.cbSize = sizeof(WNDCLASSEX);    //Size of our windows class
     53     wc.style = CS_HREDRAW | CS_VREDRAW;    //class styles
     54     wc.lpfnWndProc = WndProc;    //Default windows procedure function
     55     wc.cbClsExtra = NULL;    //Extra bytes after our wc structure
     56     wc.cbWndExtra = NULL;    //Extra bytes after our windows instance
     57     wc.hInstance = hInstance;    //Instance to current application
     58     wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);    //Title bar Icon
     59     wc.hCursor = LoadCursor(NULL, IDC_ARROW);    //Default mouse Icon
     60     wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 2);    //Window bg color
     61     wc.lpszMenuName = NULL;    //Name of the menu attached to our window
     62     wc.lpszClassName = WndClassName;    //Name of our windows class
     63     wc.hIconSm = LoadIcon(NULL, IDI_WINLOGO); //Icon in your taskbar
     64 
     65     if (!RegisterClassEx(&wc))    //Register our windows class
     66     {
     67         //if registration failed, display error
     68         MessageBoxW(NULL, L"Error registering class",    
     69             L"Error", MB_OK | MB_ICONERROR);
     70         return 1;
     71     }
     72 
     73     hwnd = CreateWindowExW(    //Create our Extended Window
     74         NULL,    //Extended style
     75         WndClassName,    //Name of our windows class
     76         L"Window Title ----Hello",    //Name in the title bar of our window
     77         WS_OVERLAPPEDWINDOW,    //style of our window
     78         CW_USEDEFAULT, CW_USEDEFAULT,    //Top left corner of window
     79         width,    //Width of our window
     80         height,    //Height of our window
     81         NULL,    //Handle to parent window
     82         NULL,    //Handle to a Menu
     83         hInstance,    //Specifies instance of current program
     84         NULL    //used for an MDI client window
     85         );
     86 
     87     if (!hwnd)    //Make sure our window has been created
     88     {
     89         //If not, display error
     90         MessageBoxW(NULL, L"Error creating window",
     91             L"Error", MB_OK | MB_ICONERROR);
     92         return 1;
     93     }
     94 
     95     ShowWindow(hwnd, ShowWnd);    //Shows our window
     96     UpdateWindow(hwnd);    //Its good to update our window
     97 
     98     return true;    //if there were no errors, return true
     99 }
    100 
    101 int messageloop(){    //The message loop
    102 
    103     MSG msg;    //Create a new message structure
    104     ZeroMemory(&msg, sizeof(MSG));    //clear message structure to NULL
    105 
    106     while(true)    //while there is a message
    107     {
    108         //if there was a windows message
    109         if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    110         {
    111             if (msg.message == WM_QUIT)    //if the message was WM_QUIT
    112                 break;    //Exit the message loop
    113 
    114             TranslateMessage(&msg);    //Translate the message
    115 
    116             //Send the message to default windows procedure
    117             DispatchMessage(&msg);
    118         }
    119         else
    120         {    //Otherewise, keep the flow going
    121 
    122         }
    123 
    124 
    125     }
    126 
    127     return (int)msg.wParam;        //return the message
    128 
    129 }
    130 
    131 LRESULT CALLBACK WndProc(HWND hwnd,    //Default windows procedure
    132                          UINT msg,
    133                          WPARAM wParam,
    134                          LPARAM lParam)
    135 {
    136     switch( msg )    //Check message
    137     {
    138 
    139     case WM_KEYDOWN:    //For a key down
    140         //if escape key was pressed, display popup box
    141         if( wParam == VK_ESCAPE ){
    142             if(MessageBoxW(0, L"Are you sure you want to exit?",
    143                 L"Really?", MB_YESNO | MB_ICONQUESTION) == IDYES)
    144 
    145                 //Release the windows allocated memory  
    146                 DestroyWindow(hwnd);
    147         }
    148         return 0;
    149 
    150     case WM_DESTROY:    //if x button in top right was pressed
    151         PostQuitMessage(0);
    152         return 0;
    153     }
    154     //return the message for windows to handle it
    155     return DefWindowProc(hwnd,    
    156         msg,
    157         wParam,
    158         lParam);
    159 }
    View Code

    学习地址:

    https://www.braynzarsoft.net/viewtutorial/q16390-directx-11-an-introduction-to-the-win32-api

    本文由博主(YinaPan)原创或者转载,如若转载请务必注明出处,谢谢合作!
  • 相关阅读:
    专职DBA-MySQL体系结构与基本管理
    JSON
    MIME类型
    文件上传下载
    response常用的方法
    2020.11.27小记
    HTTP请求状态码
    1561. Maximum Number of Coins You Can Get
    1558. Minimum Numbers of Function Calls to Make Target Array
    1557. Minimum Number of Vertices to Reach All Nodes
  • 原文地址:https://www.cnblogs.com/YinaPan/p/awindow.html
Copyright © 2011-2022 走看看