獲取視窗控制代碼

2021-09-24 13:04:02 字數 1602 閱讀 3548

在windows中,控制代碼是乙個系統內部資料結構的引用。例如當你操作乙個視窗,或說是乙個delphi窗體時,

系統會給你乙個該視窗的控制代碼,系統會通知你:你正在操作142號視窗,就此你的應用程式就能要求系統對

142號視窗進行操作——移動視窗、改變視窗大小、把視窗最小化等等。實際上許多windows api函式把句

柄作為它的第乙個引數,如gdi(圖形裝置介面)控制代碼、選單控制代碼、例項控制代碼、位圖控制代碼等,不僅僅侷限於窗

口函式。換句話說,控制代碼是一種內部**,通過它能引用受系統控制的特殊元素,如視窗、位圖、圖示、記憶體

塊、游標、字型、選單等。

定義控制代碼是什麼?

在windows中,控制代碼是和物件一一對應的32位無符號整數值。物件可以對映到唯一的控制代碼,

控制代碼也可以對映到唯一的物件。

用途為什麼我們需要控制代碼?

更準確地說,是windows需要控制代碼。windows需要向程式設計師提供必要的程式設計介面,在這些介面中,允許程式設計師訪問、建立和銷毀物件。但是,出於封裝地考慮,windows並不想向程式設計師返回指標。指標包含了太多的資訊。首先指標給出了物件儲存的確切位置;其次,要操作乙個指標,程式設計師必須知道指標所指物件的內部結構特徵,也即,windows必須向程式設計師暴露相應的資料結構,而這些資料結構也許是作業系統想向程式設計師隱藏的。如果說com技術向使用者隱藏了資料,只暴露了介面並只允許按介面定義的方法運算元據的話,控制代碼這種方式則允許你按自己的方式直接運算元據,但windows又不向

你直接暴露資料。直接運算元據是程式設計師需要的,不暴露資料是windows所需要的,控制代碼封裝方式實現了各取所需。

下面是我寫的乙個例子,實現功能效果是當主視窗最小化時,當前所有開啟視窗隱藏,主視窗顯示時,所有開啟視窗顯示。

/// /// 獲取窗體的控制代碼函式

///

/// 視窗類名

/// 視窗標題名

/// 返回控制代碼

[dllimport("user32.dll", entrypoint = "findwindow", setlasterror = true)]

public static extern intptr findwindow(string lpclassname, string lpwindowname);

/// /// 通過控制代碼,窗體顯示函式

///

/// 窗體控制代碼

/// 顯示方式

/// 返工成功與否

[dllimport("user32.dll", entrypoint = "showwindowasync", setlasterror = true)]

public static extern bool showwindowasync(intptr hwnd, int cmdshow);

private void form1_resize(object sender, eventargs e)

;//視窗標題名

if (windowstate == formwindowstate.minimized) //判斷是否為最小化}}

if (windowstate == formwindowstate.normal) //判斷是否為預設大小的視窗}}

#endregion

}

獲取視窗控制代碼

afxgetmainwnd afxgetmainwnd獲取自身視窗控制代碼 hwnd hwnd afxgetmainwnd m hwnd gettopwindow 函式功能 該函式檢查與特定父視窗相聯的子視窗z序 z序 垂直螢幕的方向,即疊放次序 並返回在z序頂部的子視窗的控制代碼。函式原型 hwn...

MFC 視窗控制代碼獲取

控制代碼獲取方法 獲取該視窗的控制代碼後,即可向該視窗類類傳送訊息 處理程式 0。獲取所在類視窗的控制代碼 this m hwnd 1。主視窗的控制代碼 無論在主視窗類內,還是子視窗類內,獲取主視窗控制代碼的方法 afxgetmainwnd m hwnd,如 sendmessage afxgetma...

Qt獲取當前視窗控制代碼 獲取視窗中控制項的控制代碼

大家可以看這篇文章,講的比較詳細。winid 函式。qt5裡面 如果想獲取qt視窗的控制代碼用於顯示 且看我操作 hwnd m hwnddisplay hwnd this winid 獲取當前this視窗的控制代碼 mycamera display m hwnddisplay 呼叫你camera的d...