CreateWindow 建立普通的視窗

2022-09-02 09:09:09 字數 2949 閱讀 7874

(1)函式原型

1

hwnd createwindow(

2 lpctstr lpclassname, //

pointer to register class name

3 lpctstr lpwindowname, //

pointer to window name

4 dword dwstyle, //

window style

5int x, //

horizontal position of window

6int y, //

vertical positon of window

7int nwidth, //

window width

8int nheight, //

window height

9 hwnd hwndparent, //

handle to parent or owner window

10 hmenu hmenu, //

handle to menu or child-window identifier

11 handle hinstance, //

12 lpvoid lpparam //

pointer to window-creation data

13 }

(2)函式說明

該函式建立乙個重疊式、彈出式視窗或子視窗。createwindow函式指定視窗型別、視窗標題、視窗樣式和視窗的初始位置及大小(可選項)。createwindow函式還指定視窗的父視窗、擁有者視窗和視窗選單。

對重疊式視窗、彈出式視窗和子視窗來講,createwindow函式傳送wm_create、wm_getminmaxinfo和wm_nccreate訊息給視窗。wm_create訊息的lparam引數包含乙個指向createstruct資料結構的指標。如果將視窗指定為ws_wisible樣式,createwindow函式將把為開啟和顯示此視窗所需要的所有訊息傳送給該視窗,以便開啟和顯示該視窗。如果視窗樣式函式指定了標題條,則由lpwindowname引數指定的視窗標題將在標題條中顯示。當使用createwindow建立如按鈕、選中和正文等控制項時,lpwindowname引數指定控制項的正文。

createwindow函式即可用作寬字元函式,有可用作ansi函式。

(3)引數說明

① lpclassname:指向乙個以null為終止符的字串,該串命名視窗類。類名可以是用registerclass函式註冊的任何名字,或者是在下表中的任何預定義的控制類名。

《控制項類名及其含義》

類實際含義

button

乙個小的矩形子視窗,該子視窗代表乙個按鈕,使用者能通過滑鼠單擊來開啟或關閉它。按鈕控制項可單獨使用或成組使用,也可貼上文字標籤,也可不包含文字。當使用者用滑鼠單擊此按鈕時,按鈕控制項常常要改變它的顯示外觀。

combobox

規定乙個控制項,該控制項由類似與乙個編輯控制項和乙個列表框的選擇區域組成。列表框可一直顯示,或由使用者單擊緊挨選擇域的下拉圖示來顯示或隱藏。使用者能否編輯選擇域中的內容取決於組合框的方式。如果列表框是可見的,則鍵入到選擇框中的內容將使列表框中與輸入字元匹配的第1條列表框項變成高亮顯示。相反,在列表框中選擇乙個項後,將在選擇域中顯示這個選擇項。

edit

規定乙個矩形子視窗。使用者能在這個視窗通過鍵盤輸入文字。使用者選擇控制項後,輸入焦點將賦給此控制項,這可通過在此控制項上按下滑鼠鍵或用tab鍵將輸入該焦點移到此控制項上來實現。當控制項顯示乙個閃爍的插入字元時,使用者就能輸入文字。滑鼠能用於移動游標和選擇要替換的字元或者在插字元處定位游標。backspace鍵能用來刪除字元。編輯控制項使用變寬字並顯示ansi字元,編譯執行用以前windows版本的應用程式,將顯示不等寬字型的文字。應用程式還可傳送wm_setfont訊息給編輯控制,以便改變預設字型。編輯控制項把製表符按需要擴充套件成多個空格字元,以把游標移到下乙個製表定位處。tab的停止位置假定在第8個字元位置上。

listbox

指定乙個字串表。應用程式在任何需要顯示乙個名字列表的時候(例如:使用者檢視和選擇檔名)該控制項將被使用。使用者可通過滑鼠單擊選中乙個串,此串被高亮顯示,並且傳送乙個通知資訊給父視窗。在列表框控制項中,可使用垂直或水平的螢幕滾動條,以便在控制項視窗中滾動超出列表框範圍的列表項。列表框可根據需要自動地隱藏或顯示螢幕滾動條。

mdiclient

指定乙個mdi使用者視窗。使用者視窗接收控制mdi應用程式子視窗的訊息。推薦方式為ws_clipchiildren和ws_child。應用程式可以使用ws_hscroll和ws_vscroll方式來建立乙個允許使用者滾動mdi子視窗的mdi使用者窗。

richedit

指定乙個richedit1.0控制項,此控制項可以檢視和編輯文字,並且具有字元和段落功能。此控制項還能夠接納com物件。

指定乙個richedit2.0控制項

scrollbar

指定乙個滾動條矩形,此矩形兩頭有方向箭頭,中間有翻閱塊。每當使用者在滾動條控制項上按鍵時,滾動條就傳送乙個通知訊息給它的父視窗。如果必要的話,父視窗負責修改翻閱塊。滾動條控制與普通視窗中使用滾動條具有相同的外觀並使用相同的函式。但與一般滾動條不同,滾動條控制項能夠定位在視窗中的任何位置上,並在任何需要為乙個視窗提供滾動條輸入時使用。

static

指定「乙個簡單的正文域、框,或者可貼上標籤的矩形、框,或分開其他控制的矩形」。靜態空間無輸入,也不提供輸入。

② lpwindowname:指向乙個以null為終止符的字串,該字串代表該視窗的名字。

③ dwstyle:指定所建立的視窗樣式。它可以是下表中給出的任何方式的組合。

④ x:指定視窗初始的x位置。對於重疊式視窗或者彈出式視窗,x引數為視窗左上角初始的x座標(在螢幕座標系中)。

如果這個值是cw_usedefault,windows為視窗左上角選擇預設的位置。對於乙個子視窗,x是視窗在其父視窗的使用者區域中

⑤ y:指定

導致CreateWindow建立視窗失敗的一種原因

createwindow返回null,getlasterror 返回0 經過網上蒐集資料和單步除錯發現問題 在程式呼叫createwindow函式之前會首先呼叫wndproc具體原因暫時不詳,我的程式這裡好像是會呼叫三次wndproc,可能是系統傳送的訊息 然後會呼叫createwindow,所以當...

CreateWindow建立子視窗失敗

在學習 windows程式設計 過程中,經常會遇到問題,每次懷疑書上寫的有問題,當然,每次都會證明是自己的問題,下面是一次建立視窗失敗的問題查詢。之前是一直在模板上改需要自定義的部分引數,但是當自己手動建立的時候,問題總是一堆一堆的 1 沒有註冊類就直接建立,createwindow會返回空值 2 ...

CreateWindow函式返回NULL

在學習windows開發期間,遇到的問題。寫了乙個gui專案,執行之後,沒有反應。除錯後發現,createwindow函式返回null。大概的 如下 include main.h include includechar szfilepath max path char szresult 4096 c...