找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2655|回復(fù): 1
收起左側(cè)

windows 窗口創(chuàng)建

[復(fù)制鏈接]
ID:72008 發(fā)表于 2015-1-11 19:24 | 顯示全部樓層 |閱讀模式
1、設(shè)計(jì)窗口類
2、注冊(cè)窗口
3、創(chuàng)建窗口
4、顯示窗口與更新窗口
5、消息循環(huán)
6、窗口函數(shù)




1.設(shè)計(jì)窗口
typedef struct tagWNDCLASS {
    UINT        style;                              //窗口的樣式
    WNDPROC     lpfnWndProc;        //名回調(diào)函數(shù)的名字
    int         cbClsExtra;                     //窗口類無(wú)擴(kuò)展
    int         cbWndExtra;                  //窗口實(shí)例無(wú)擴(kuò)展
    HINSTANCE   hInstance;            //當(dāng)前實(shí)例句柄
    HICON       hIcon;                              //窗口的圖標(biāo)   
    HCURSOR     hCursor;                    //光標(biāo)的形狀與類型
    HBRUSH      hbrBackground;         //窗口的背景
    LPCSTR      lpszMenuName;       //設(shè)定菜單
    LPCSTR      lpszClassName;      //設(shè)定窗口名字(類名)
} WNDCLASS, *PWNDCLASSA, NEAR *NPWNDCLASSA, FAR *LPWNDCLASSA;

注:以上是設(shè)計(jì)窗口的一個(gè)結(jié)構(gòu)體 ,
       作用是確定窗口的 。
       圖標(biāo)、窗口樣式、回調(diào)函數(shù)、背景、光標(biāo)、類名等屬性


2.注冊(cè)窗口

RegisterClass(&XXX);

注:XXX代表  某某某設(shè)計(jì)窗口的結(jié)構(gòu)體名+“&”是取地址
       作用是導(dǎo)入內(nèi)存


3.創(chuàng)建窗口

CreaeWindow 創(chuàng)建窗口函數(shù)原型
HWND CreateWindow(

LPCTSTR lpClassName, //窗口類名(與設(shè)計(jì)函數(shù)的類名相同)

LPCTSTR lpWindowName,  //窗口標(biāo)題

DWORD dwStyle,       //窗口樣式,多種樣式
int x,    //x坐標(biāo) (屏幕坐標(biāo))
int y,              //Y坐標(biāo)(屏幕坐標(biāo)

int nWidth,   //寬

int nHeight,       //高

HWND hWndParent,   //父窗口

HMENU hMenu,       //加載菜單的句柄

HANDLE hlnstance,  //創(chuàng)建此窗口的應(yīng)用程序的當(dāng)前句柄(PID)(也是設(shè)計(jì)窗口中的.hInstance)

LPVOID lpParam    // 這個(gè)一般是NULL。不用的

);


注:以上是一個(gè)創(chuàng)建窗口的函數(shù) <CreaeWindow>創(chuàng)建窗口后
       函數(shù)會(huì)返回一個(gè)句柄 這時(shí)要用一個(gè) 窗口句柄類型(HWND)
       的變量來(lái)接收這個(gè)返回值。
       作用是確定:
       窗口的 標(biāo)題、窗口樣式、窗口位置、窗口大小、菜單、父窗口等等。



4、顯示窗口與更新窗口
      顯示窗口
ShowWindow(XXXX,         //第一個(gè)參數(shù)是 窗口句柄(HWND)
                      SW_SHOW  //指定窗口如何顯示
                      );


     更新窗口
UpdateWindow(hWnd   //窗口句柄
                        );



5、消息循環(huán)
下面是代碼:
       MSG msg; //聲明消息結(jié)構(gòu)

while(GetMessage(&msg,NULL,0,0)) //消息循環(huán)
{
TranslateMessage(&msg);     //讓W(xué)indows為與鍵盤相關(guān)的消息做一些轉(zhuǎn)換
DispatchMessage(&msg);      //分派消息到窗口過(guò)程函數(shù)中對(duì)消息處理
}

6、窗口函數(shù)

//窗口過(guò)程函數(shù)的實(shí)現(xiàn)(消息處理函數(shù))
LRESULT CALLBACK MyWindowProc(
       HWND hwnd,      // handle to window 窗口句柄
       UINT uMsg,      // message identifier消息標(biāo)識(shí)
       WPARAM wParam,  // first message parameter
       LPARAM lParam   // second message parameter
      )
{

   switch(uMsg)
   {
   case WM_PAINT:
   {
   TCHAR str[] = _T("這是一個(gè)Windows的SDK程序!");
   HDC hDc;//聲明HDC數(shù)據(jù)結(jié)構(gòu)
   PAINTSTRUCT  Ps;
   hDc = BeginPaint(hwnd,&Ps); //獲取設(shè)備環(huán)境句柄
   SetTextColor(hDc,RGB(13,25,200)); //設(shè)置文本顏色
   TextOut(hDc,0,0,str,18); //輸出文字
   EndPaint(hwnd,&Ps); //釋放資源
   break;
   }
   case WM_CLOSE: //點(diǎn)擊"X"按鈕時(shí)發(fā)送此消息,使消息循環(huán)停止
   if(IDYES == MessageBox(hwnd,_T("是否要退出?"),_T("提示"),MB_YESNO))
   {
             DestroyWindow(hwnd); //銷毀窗口,發(fā)送WM_DESTROY消息,注意程序進(jìn)程還沒退出
   }   
   break;
   case WM_DESTROY:
   PostQuitMessage(NULL); //進(jìn)程結(jié)束,完全退出程序
   break;
   case WM_LBUTTONDOWN:
   MessageBox(hwnd,_T("鼠標(biāo)左鍵按下"),_T("提示"),MB_OK);
   break;
   default:
   return DefWindowProc(hwnd,uMsg,wParam,lParam); //處理未處理的消息
   break;
   }

   return 0;

}



回復(fù)

使用道具 舉報(bào)

ID:28571 發(fā)表于 2015-4-18 16:15 | 顯示全部樓層
好東西,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表