Win32編程day01 學習筆記

Win32 Windows編程

 1 Windows編程基礎
 2 Windows文字的編碼
 3 窗口程序
 4 窗口消息
 5 菜單和加速鍵
 6 繪圖
 7 對話框
 8 基本控件
  .....

一 Windows編程基礎

 1 Win32應用程序的基本類型
 
   1.1 控制檯程序
      不需要完善的Windows窗口,可以使用DOS窗口
      的方式顯示。
   1.2 Win32窗口程序
      包含窗口的程序。可以通過窗口與程序進行交互。
   1.3 Win32庫程序
      提供已有的代碼,供其他程序使用。
      動態庫:DLL 是在執行的時候可以加載的程序。
      靜態庫:LIB 是在編譯鏈接時使用的程序。
   1.4 對比
      1.4.1 程序的入口函數不同
         控制檯:main
         Win32窗口程序:WinMain
         動態庫DLL:DllMain
         靜態庫LIB:無

      1.4.2 編譯鏈接後存在的形式不同
         控制檯和Win32窗口程序:EXE文件,可以執行
         動態庫DLL:DLL文件,無法執行
         靜態庫LIB:LIB文件,無法執行
        
      1.4.3 執行結果不同
         控制檯:使用DOS窗口,自己沒有窗口。
         Win32窗口程序:會產生自己的窗口,
            可以將結果輸出或者從窗口接受輸入。
         動態庫DLL:自己無法執行,提供可以執行
           的代碼,當EXE等程序執行時,可以使用
           這些代碼.執行時,該庫必須在指定的路徑.
         靜態庫LIB: 自己無法執行,提供給程序在
           編譯鏈接時使用,將庫中的代碼嵌入到
           程序當中.執行時,不需要該庫存在.

二 Win32窗口程序和編譯環境

  2.1 開發和編譯環境
    VC1.5 - VC6.0(2008) - VC10.0(2010)
 
    2.1.1 編譯器 CL.EXE
      將源代碼編譯目標代碼. OBJ文件.
    2.1.2 鏈接器 Link.EXE
      將OBJ文件和庫函數鏈接.生成EXE.
    2.1.3 資源編譯器 rc.exe
      將資源腳本編譯成可以鏈接的文件(RES).

  2.2 頭文件和庫
    2.2.1 頭文件 windows.h包含了windows
      常用的定義等.其他,還包含了一些其他的
      頭文件:
       windef.h - 定義了各種的數據類型
    winbase.h- 定義了kernel的相關函數
    wingdi.h - 定義了繪圖和文字
    winuser.h- 窗口 控件等函數
    winnt.h - 提供Unicode支持

    2.2.2 庫
       kernel32.lib - 提供進程/線程/內存等等
           API函數支持
       user32.lib - 包括窗戶/界面等等.
       gdi32.lib  - 提供繪圖/文字等。
   
  2.3 Hello World程序
 
    2.3.1 入口函數

     int WinMain( 
        HINSTANCE hInstance, 
        HINSTANCE hPrevInstance,
        LPSTR pszCmdLine,
        int  nShowCmd )

     hInstance -  應用程序的實例句柄    
    hPrevInstance - 該應用程序的前一個實例句柄
    pszCmdLine - 命令行參數
    nShowCmd - 窗口的顯示方式
   
    2.3.2 MessageBox
   
  2.4 編譯環境的準備
 
    在VC98的BIN目錄下VCVARS32.BAT

  2.5 編譯CL.EXE
    CL的常用選項
     /c 只編譯不鏈接
     /TC 編譯C文件
     /TP 編譯C++文件
           如果不指定,CL會根據文件類型自動區分
       /I 頭文件所在路徑
     字符大小寫敏感
  2.6 鏈接LINK.EXE
     LINK常用選項:
      /out:文件名,鏈接成指定文件名的程序
     /LIBPATH:LIB文件存放的路徑, /LIBPATH:"E:\XXX"
     /SUBSYSTEM: CONSOLE/WINDOW
    字符大小寫不敏感

  2.7 執行
     正常執行或帶參數執行
    
三 第一個窗口程序

   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:發送一個退出消息

     

      View Code

    #include <windows.h>

    HINSTANCE g_hInst = NULL;
   //2. 窗口處理函數
  LRESULT CALLBACK WndProc(
                                HWND hWnd,
                                UINT nMsg,
                                WPARAM wParam,
                                LPARAM lParam)
{
    switch(nMsg)
    {
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hWnd, nMsg, wParam, lParam);
}

//3. 註冊窗口類型
BOOL MyRegister(LPSTR pszClassName)
{
    WNDCLASS wc = {0};
    ATOM nAtom = 0;
    wc.style = CS_VREDRAW|CS_HREDRAW;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = g_hInst;
    wc.hIcon = NULL;
    wc.hCursor = NULL;
    wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = pszClassName;
   
    nAtom = RegisterClass(&wc);
    if(0 == nAtom)
    {
        MessageBox(NULL, "Register Failed", "Error", MB_OK|MB_ICONWARNING);
    }
    else
    {
        MessageBox(NULL, "Register Succeeded", "Succeeded", MB_OK);
    }
    return TRUE;
}

//4. 窗口創建
HWND MyCreate(LPSTR pszClassName)
{
    HWND hWnd = CreateWindow(pszClassName,
                    "Hello Windows",
                    WS_OVERLAPPEDWINDOW,
,
,
,
,
                    NULL,
                    NULL,
                    g_hInst,
                    NULL);
    if(NULL == hWnd)
    {
        MessageBox(NULL, "CreateWnd Failed", "Error", MB_OK);
    }
    else
    {
        MessageBox(NULL, "CreateWnd Succeeded", "Succeeded", MB_OK);
    }
    return hWnd;
}

//5. 顯示窗口
void DisplayWnd(HWND hWnd)
{
    ShowWindow(hWnd, SW_SHOW);
    UpdateWindow(hWnd);
}

//6. 消息處理
void Message()
{
    MSG msg = {0};
    while(GetMessage(&msg, NULL, 0, 0))
    {
        DispatchMessage(&msg);
    }
}

//1. 入口函數
int WINAPI WinMain(
                                        HINSTANCE hInstance,
                                        HINSTANCE hPrevInstance,
                                        LPSTR pszCmdLine,
                                        int nShowCmd)
{
    HWND hWnd = NULL;
    g_hInst = hInstance;
    MyRegister("MyWnd");
    hWnd = MyCreate("MyWnd");
    DisplayWnd(hWnd);
    Message();
    return 0;
}

四 資源的處理

 4.1 資源和資源腳本
    資源:ICON/CUSRUR/BITMAP/MENU......
    資源腳本: 擴展名爲rc文件。
 4.2 編譯資源
    使用rc.exe編譯資源,生成RES文件
 4.3 鏈接資源
    使用link.exe將RES文件鏈接到程序當中
 4.4 ICON的使用
   LoadIcon從指定程序中加載ICON資源。
  

五 NMAKE和Makefile

   1 NMAKE - 命令解釋器
     Makefile - 腳本語言定義的文件

 

發佈了14 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章