HWND WINAPI FindWindow(
__in_opt LPCTSTR lpClassName,
__in_opt LPCTSTR lpWindowName
);
這是一個 Windows API,用於找出某個視窗…
回傳值 HWND 為該視窗的 handle,若查無此視窗則回傳0
前幾天檢查 Code 發現自己用錯了,所以記一下…
第一個參數 ClassName 指的是要詢找 Window 的 ClassName
也就是你這個視窗的類別名…例如你的視窗長下樣醬子
class CAboutThisDialog : public CDialog
{
};
在很明確的知道該類別名稱時就可以這麼做
HWND hwndAbout;
hwndAbout = ::FindWindow(_T("CAboutThisDialog"), NULL);
if(hwndAbout)
{
// 該視窗目前存在
}
如果你不知道該類別名,可以用該視窗的標題來找,
意即那個視窗的 this.SetWindowText(); 給什麼,就用什麼來找…
例如
protected void CAboutThisDialog::OnCreate()
{
SetWindowText(_T("About This"));
}
HWND hwndAbout = ::FindWindow(NULL, _T("About This"));
另外還有一個相同用法的 API 叫 ::FindWindowEx()
此 API 多了兩個參數,原型如下
HWND WINAPI FindWindowEx(
__in_opt HWND hwndParent,
__in_opt HWND hwndChildAfter,
__in_opt LPCTSTR lpszClass,
__in_opt LPCTSTR lpszWindow
);
第一個參數為某個視窗的 handle,意即找某個 Window 中的 Window,
而第二個參數為該 Window 中的某個子視窗,從該視窗開始向後詢找,
若 hwndParent 為0,效果就和 FindWindow() 一樣,
若 hwndChildAfter 為 0,就由 hwndParent 的第一個視窗開始往後找。
想獲得視窗中的子視窗可以使用以下 functon,
當然也有相對應的 API,多傳個父視窗 handle 而已…
CWnd* GetWindow(
UINT nCmd
) const;
HWND WINAPI GetWindow(
__in HWND hWnd,
__in UINT uCmd
);
// Example
CWnd *wndChild = GetWindow(GW_CHILD);
沒有留言:
張貼留言