我的第一個win32 helloworld

#include <windows.h>
#include "resource.h"

HINSTANCE g_instance;

BOOL MyRegisterClass(LPSTR pClassName);

void dispWindow(HWND hWnd);

HWND MyCreateWindow(LPSTR lpClassName);
//入口函數
int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd )
{
 g_instance = hInstance;
 LPSTR pClassName = "helloWindow";
 MyRegisterClass(pClassName);
 HWND m_hWnd= MyCreateWindow(pClassName);
 if(m_hWnd == NULL)
 {

  MessageBox(NULL,"create Window fail","",0);
 }

 dispWindow(m_hWnd);


 MSG msg;
 while(GetMessage(&msg,NULL,0,0))
 {

  DispatchMessage(&msg);
 }

 //system("pause");
 return 0;
}

LRESULT  CALLBACK WndProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam)
{

 switch(nMsg)
 {

 case WM_QUIT:
   ;
      //CloseWindow(hWnd);
      // DestroyWindow(hWnd);

     // return DefWindowProc(hWnd,nMsg,wParam,lParam);
 case WM_DESTROY:

  PostQuitMessage(0);//程序退出消息循環

 }

 return DefWindowProc(hWnd,nMsg,wParam,lParam);


}

///註冊窗口類

BOOL MyRegisterClass(LPSTR pClassName)
{

 WNDCLASS wndClass = {0};
 wndClass.style =CS_HREDRAW |CS_VREDRAW | CS_DBLCLKS;
 wndClass.hIcon = NULL;
 wndClass.hbrBackground = (HBRUSH)COLOR_WINDOWFRAME;
 wndClass.lpszClassName ="helloWindow";
 wndClass.hInstance =  g_instance ;
 wndClass.lpfnWndProc = WndProc;
 wndClass.hCursor = NULL;
 wndClass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
 wndClass.lpszClassName = pClassName;
 ATOM  nATom = RegisterClass(&wndClass);
 if(nATom == 0 )
 {

  MessageBox(NULL,"rigter fail!","",0);
  //AfxMessageBox("註冊失敗!");

 }
 else
 {
  // MessageBox(NULL,"rigter Ok!","",0);

 }
 return FALSE;
}

//創建窗口類
HWND MyCreateWindow(LPSTR lpClassName)
{
 CREATESTRUCT m_createStruct  = {0};
 HWND m_wnd = CreateWindow(lpClassName,"hello my window", WS_OVERLAPPEDWINDOW,20,20,640,480,NULL,NULL,g_instance,&m_createStruct);
 return m_wnd;
}

void dispWindow(HWND hWnd)
{

 ShowWindow(hWnd,SW_SHOWNORMAL);
 UpdateWindow(hWnd);
}

 

 //-------------------------------------------------------------------------

 

第一個窗口程序

   3.1 入口函數WinMain
   3.2 窗口處理函數
     當窗口處理消息事件時,系統調用該函數
    LRESULT CALLBACK WindowProc(
   HWND hwnd,      // 窗口的句柄
   UINT uMsg,      // 消息的ID號
   WPARAM wParam,  // 消息所對應的參數
   LPARAM lParam   // 消息所對應的參數
  );
   3.3 註冊窗口類型
    typedef struct _WNDCLASS {
    UINT    style;  //窗口類的風格
    WNDPROC lpfnWndProc; //窗口處理函數
    int     cbClsExtra; //窗口類附加數據大小
    int     cbWndExtra; //窗口附加數據大小
    HANDLE  hInstance; //當前應用程序的實例句柄
    HICON   hIcon; //窗口圖標
    HCURSOR hCursor; //窗口的鼠標
    HBRUSH  hbrBackground; //窗口的背景畫刷
    LPCTSTR lpszMenuName; //菜單
    LPCTSTR lpszClassName; //類型名稱
    } WNDCLASS;
   
    註冊函數 RegisterClass
   3.4 創建窗口
     HWND CreateWindow(
    LPCTSTR lpClassName,  //窗口類型名稱
    LPCTSTR lpWindowName, //窗口名稱
    DWORD dwStyle,        //窗口類型
    int x,                //窗口的左上角X坐邊
    int y,                //窗口的左上角X坐邊
    int nWidth,           //窗口的寬度
    int nHeight,          //窗口的高度
    HWND hWndParent,      //父窗口句柄
    HMENU hMenu,          //窗口菜單句柄
     HANDLE hInstance,     //應用程序的實例句柄
     LPVOID lpParam        //創建的參數,一般爲NULL
    );

   3.5 顯示窗口
     ShowWindow 顯示窗口
        BOOL ShowWindow(
     HWND hWnd,     //顯示的窗口句柄
      int nCmdShow   //顯示的方式
     );
     UpdateWindow 刷新窗口
   3.6 消息處理
     GetMessage 獲取消息
     DispatchMessage 派發消息
  
   3.7 程序退出
     窗口銷燬時,退出程序。在WndProc中實現。
        WM_DESTROY: 當窗口銷燬時,會調用WndProc
          傳遞給使用者。
        PostQuitMessage:發送一個退出消息。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章