日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

窗口句柄、窗口类对象的关系

發(fā)布時間:2023/12/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 窗口句柄、窗口类对象的关系 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

HWND hwnd;//窗口句柄

CWnd wnd;//窗口類對象

窗口類對象中有一個成員是窗口句柄。

?

?窗口句柄,提供了窗口的一個標識,類似于指針的概念,每一個窗口都對應了一個窗口句柄作為其標識,通過句柄可以方便的從內(nèi)存中索引到資源。窗口類的對象則是對應窗口類的一個實例化,在MFC程序中,通過子類對象訪問類的函數(shù)時就不需要提供窗口句柄作為資源標識。

舉例說明:

SDK編程中創(chuàng)建一個窗口首先要定義一個窗口句柄,然后調用API函數(shù)創(chuàng)建并顯示窗口,此時需要向函數(shù)傳遞窗口句柄,具體如下:
HWND hwnd;

hwnd=::CreateWindowEx();

::ShowWindow(hwnd,SW_SHOW);

::UpdateWindow(hwnd);

利用MFC開發(fā)程序時,在CWnd類中定義了一個類型為句柄的成員變量HWND m_hWnd, 類中有函數(shù)

HWND CreateWindowEx(DWORD dwExStyle, // extended window styleLPCTSTR lpClassName, // registered class nameLPCTSTR lpWindowName, // window nameDWORD dwStyle, // window styleint x, // horizontal position of windowint y, // vertical position of windowint nWidth, // window widthint nHeight, // window heightHWND hWndParent, // handle to parent or owner windowHMENU hMenu, // menu handle or child identifierHINSTANCE hInstance, // handle to application instanceLPVOID lpParam // window-creation data ); 利用MFC開發(fā)程序時,在CWnd類中定義了一個類型為句柄的成員變量HWND m_hWnd, 類中有函數(shù)其返回值為一個句柄,在函數(shù)體內(nèi)部利用API函數(shù)CreateWindowEx來完成窗口的創(chuàng)建。將其返回值保存到m_hWnd中,在實例化一個對象CWnd wnd;

wnd.CreatEx(...);

wnd.ShowWindow(SW_SHOW);

wnd.UpdateWindow();

可見利用對象創(chuàng)建窗口不需要向函數(shù)傳遞窗口句柄資源。因為在CWnd中定義了一個成員變量m_hWnd,由它保存了這個窗口句柄,調用CreateWindowEx時把句柄保存到CWnd類中,

所以再次調用ShowWindow中就不用傳遞句柄。

?

這里需要聲明一點此處的wnd對象并不是窗口,將窗口關閉的時候這個對象并沒有銷毀,僅僅是將句柄設置為NULL,對象和窗口生存周期之間沒有必然聯(lián)系,對象和窗口唯一聯(lián)系的紐帶是在類的內(nèi)部有一個窗口句柄的成員變量,保存了相關窗口的句柄,所以當對象銷毀的時候這個窗口是要銷毀的。一般的說在執(zhí)行到右大括號之前對象都是沒有被銷毀的,而此時若調用DestroyWindow則是銷毀窗口

常用轉換如下

指針->句柄:hWnd = pWnd->GetSafeHwnd();

ID->句柄:hWnd = ::GetDlgItem(hParentWnd, ID);

句柄->指針:pWnd = CWnd::FromHandle(hWnd);

ID->指針:pWnd = Cwnd::GetDlgItem();

指針->ID:ID = GetWindowLong(pWnd->GetSafeHwnd(), GWL_ID);

句柄->ID:ID = GetWindowLong(hWnd, GWL_ID);


?

總結

以上是生活随笔為你收集整理的窗口句柄、窗口类对象的关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。