电竞比分网-中国电竞赛事及体育赛事平台

分享

窗口子類化_改變控件的窗口處理函數(shù)

 cjavahtml 2015-10-21
  一、原理:

  應(yīng)用程序在創(chuàng)建一個新窗口之前要向Windows系統(tǒng)注冊這個窗口的類,首先要填寫一個WNDCLASS結(jié)構(gòu),其中的結(jié)構(gòu)參數(shù)

  lpfnWndProc就是該類窗口函數(shù)的地址,接著調(diào)用RegisterClass()函數(shù)向Windows系統(tǒng)申請注冊這個窗口類。這時Windows會

  為其分配一塊內(nèi)存來存放該類的全部信息,這個內(nèi)存塊稱為窗口類內(nèi)存塊。

  窗口子類化技術(shù)實際上就是改變窗口內(nèi)存塊中的有關(guān)參數(shù)。由于這種修改只涉及到一個窗口的窗口內(nèi)存塊,因此它不會影響到

  屬于同一窗口類的其它窗口的功能和表現(xiàn)。窗口子類化中最常見的是修改窗口內(nèi)存塊中的窗口函數(shù)地址(lpfnWndProc),使其指向

  一個新的窗口函數(shù),從而改變原窗口函數(shù)的處理方法,以達(dá)到修改其窗口過程的目的。

  二、實現(xiàn)步驟:

  1.編寫子類化窗口過程函數(shù)。其格式是標(biāo)準(zhǔn)的窗口過程函數(shù)格式即:

  LRESULT CALLBACK SubClassWndProc ( HWND , UINT , WPARAM , LPARAM) ;

  參數(shù)含義與窗口過程函數(shù)相同。

  2.調(diào)用GetWindowLong ( hWnd , GWL_WNDPROC )函數(shù)獲得原窗口函數(shù)的地址并保存起來;其中參數(shù)hWnd為待子類化窗口句柄。

  3.調(diào)用SetWIndowLong ( hWnd , GWL_WNDPROC , SubClassWndProc )將窗口函數(shù)替換成子類化函數(shù),實現(xiàn)窗口子類化。

  三、Example:

  LRESULT CALLBACK ProcFloat(HWND,UINT,WPARAM,LPARAM);

  WNDPROC EditProc; //EditProc用來保存原窗口函數(shù)地址, 就設(shè)為全局的

  EditProc = (WNDPROC)SetWindowLong( //函數(shù)返回的是hChild父窗口的窗口過程函數(shù)

  hChild, //需要子類化窗口

  GWL_WNDPROC

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多