C Windows程式設計之建立視窗

2021-06-12 07:41:59 字數 4216 閱讀 4530

windows程式設計之註冊視窗類介紹了註冊視窗類。接下來就是建立窗體。

我們用visual studio建立乙個win32專案上會自動生成乙個建立窗體函式。如下:

<

// 函式: initinstance(hinstance, int)

//// 目的: 儲存例項控制代碼並建立主視窗

//// 注釋:

//// 在此函式中,我們在全域性變數中儲存例項控制代碼並

// 建立和顯示主程式視窗。

//bool initinstance(hinstance hinstance, int ncmdshow)

showwindow(hwnd, ncmdshow);

updatewindow(hwnd);

return true;

}

下面一句一句解釋:

hwnd hwnd;

h 是型別描述,表示控制代碼, wnd 是變數物件描述,表示視窗,所以hwnd 表示視窗控制代碼

。通俗地說,如果把乙個到處跑的人當作指標的話,那麼hwnd就是該人的身份證----我想應該是身份證號碼

hinst是專案自動生成的乙個全域性變數,**如下: hinstance hinst; // 當前例項所以這句話的意識就是將例項控制代碼儲存在全域性變數中。

createwindow函式建立乙個重疊式視窗、彈出式視窗或子視窗。它指定視窗類,視窗標題,視窗風格,以及視窗的初始位置及大小(可選的)。函式也指該視窗的父視窗或所屬視窗(如果存在的話),及視窗的選單。若要使用除createwindow函式支援的風格外的擴充套件風格,則使用createwindowex函式代替createwindow函式。函式原型為:

hwnd createwindow(

lpctstr lpclassname,

lpctstr lpwindowname,

dword dwstyle,

int x,

int y,

int nwidth,

int nheight,

hwnd hwndparent,

hmenu hmenu,

handle hlnstance,

lpvoid lpparam);

lpclassname指向乙個空結束的字串或整型數atom。如果該引數是乙個整型量,它是由此前呼叫theglobaladdatom函式產生的全域性量。這個小於0xc000的16位數必須是lpclassname引數字的低16位,該引數的高位必須是0。

lpwindowname指向乙個指定視窗名的空結束的字串指標。如果視窗風格指定了標題條,由lpwindowname指向的視窗標題將顯示在標題條上。當使用createwindow函式來建立控制例如按鈕,選擇框和靜態控制時,可使用lpwindowname來指定控制文字。

dwexstyle

指定建立視窗的風格。該引數可以是下列視窗風格的組合再加上說明部分的控制風格。風格意義如下表:

(表中風格巨集都應為大寫,為方便閱讀,我使用小寫,寫程式是須使用大寫)

風   格    巨集

解    釋

ws_border

單線邊框

ws_caption

有標題框的視窗(包括ws_boder風格)

ws_popup

作為乙個彈出式視窗

ws_child

作為子窗體(與ws_popup互斥)

ws_disabled

視窗不能初始化,並且遮蔽與使用者的互動

ws_dlgframe

視窗的外觀類似與對話方塊

ws_group

作為窗體的控制項,可以與其他控制項組合

ws_hscroll

視窗具有水平滾動條

ws_vscroll

視窗具有垂直滾動條

ws_maximize

初始狀態為最大化的視窗

ws_maximizebox

視窗右上角有乙個最大化按鈕

ws_minimize

初始狀態為最小化的視窗

ws_minimizebox

視窗右上角有乙個最小化按鈕

邊框重疊的視窗

ws_sizebox

視窗的邊框可以變化

ws_sysmenu

在視窗的標題欄的最左上角有乙個視窗選單

ws_tabstop

視窗作為控制項,並且互動可以停留在這個控制項上

ws_visible

視窗建立的初始狀態是可見的

x,y,nwidth,nheight

制定了視窗的位置和大小,x和y指定初始左定點座標,nwidth和nheight指定寬度和高度。

hwndparent指向被建立視窗的父視窗或所有者視窗的控制代碼。若要建立乙個子視窗或乙個被屬視窗,需提供乙個有效的視窗控制代碼。這個引數對彈出式視窗是可選的。

hmenu選單控制代碼,或依據視窗風格指明乙個子視窗標識。對於層疊或彈出式視窗,hmenu指定視窗使用的選單:如果使用了選單類,則hmenu可以為null。對於子視窗,hmenu指定了該子視窗標識(乙個整型量),乙個對話方塊使用這個整型值將事件通知父類。應用程式確定子視窗標識,這個值對於相同父視窗的所有子視窗必須是唯一的。

hinstance在早期的作業系統中,如windows 95/98/me,該引數指定與視窗相關的模組例項的控制代碼,而在較新的作業系統中,如windows nt/2000/xp/7,可以不理睬該引數。

lppraram指向乙個值的指標,該值傳遞給視窗 wm_create訊息。該值通過在iparam引數中的createstruct結構傳遞。如果應用程式呼叫createwindow建立乙個mdi客戶視窗,則lpparam必須指向乙個clientcreatestruct結構。返回值:如果函式成功,返回值為新視窗的控制代碼:如果函式失敗,返回值為null。若想獲得更多錯誤資訊,請呼叫getlasterror函式。

if (!hwnd)

如果建立

視窗控制代碼失敗,則返回錯誤

showwindow(hwnd, ncmdshow);

顯示窗體,showwindow函式的原型為bool showwindow(hwnd hwnd,int ncmdshow);第乙個引數指定要顯示視窗的控制代碼,第二個引數指定視窗的顯示方式,如果載入應用程式提供了startupinfo結構,則應用第一次呼叫showwindow函式時不理財該引數;否則,應用第一次呼叫showwindow函式時從winmain函式的ncmdshow引數中獲取實際值。在後續的函式呼叫中,ncmdshow的值可以說下表中的任意乙個。(表中顯示巨集都應為大寫,為方便閱讀,我使用小寫,寫程式是須使用大寫)

顯   示    巨集

結    果

sw_forceminimize

在windownt5.0中最小化視窗,即使擁有視窗的執行緒被掛起也會最小化。在從其他執行緒最小化視窗時才使用這個引數

sw_hide

隱藏視窗並啟用其他視窗

sw_mazimize

最大化指定的視窗

sw_minimize

最小化指定的視窗。

sw_restore

啟用並顯示視窗。如果視窗最小化或最大化,則系統將視窗恢復到原來的尺寸和位置。在恢復最小化視窗時,應用程式應該指定這個標誌

sw_show

在視窗原來的位置以原來的尺寸啟用和顯示視窗

sw_showdefault

依據在startupinfo結構中指定的sw_flag標誌設定顯示狀態,startupinfo 結構是由啟動應用程式的程式傳遞給createprocess函式的。

sw_showmaximized

啟用視窗並將其最大化

sw_showminimized

啟用視窗並將其最小化

sw_showminnoactive

視窗最小化,並不啟用視窗,但啟用視窗仍然維持啟用狀態

sw_showna

以視窗原來的狀態顯示視窗,啟用視窗仍然維持啟用狀態

sw_shownoactivate

以視窗最近一次的大小和狀態顯示視窗,啟用視窗仍然維持啟用狀態

sw_shownormal

啟用並顯示乙個視窗。如果視窗被最小化或最大化,系統將其恢復到原來的尺寸和大小。應用程式在第一次顯示視窗的時候應該指定此標誌

updatewindow(hwnd);

如果視窗更新的區域不為空,updatewindow函式通過傳送乙個wm_paint訊息來更新指定視窗的客戶區。函式繞過應用程式的訊息佇列,直接傳送wm_paint訊息給指定視窗的視窗過程,如果更新區域為空,則不傳送訊息。

windows程式設計之訊息迴圈和訊息結構

C windows視窗專案

一 用vs2015建winform專案的步驟。1.新建解決方案 新建windows窗體專案 2.在窗體介面最上方點選檢視 工具箱,用工具箱可直接往窗體新增各種控制項 3.選中控制項右擊開啟屬性,在屬性中為控制項命名 4.進頁面外觀 中,為控制項設定初值 點選事件 各種屬性。5.在form.cs後台 ...

c windows視窗控制代碼控制

1.首先我們可以通過spy 獲取到視窗的控制代碼以及視窗的類名,這個是十分簡單的,比如說底部工作列的是 類名 shell traywnd 模組名 explorer 標題是 空 2.找到視窗的控制代碼,好了到這一步我們就非常容易操作找到視窗控制代碼了 hwnd task task findwindow...

C windows服務 一 建立

新建服務專案 雙擊service1.cs,出現介面,右鍵,選擇 新增安裝程式 專案中會生成 projectinstaller.cs,修改projectinstaller.cs 設定執行該服務應用程式時所使用的帳戶型別,預設account,服務安裝的時候會提示輸入使用者名稱密碼 this.servic...