青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

yehao's Blog

如何子類化(SubclassWindow)窗體

轉自http://blog.csdn.net/yuntongsf/article/details/4443356
窗口子類化的作用
         窗口子類化技術最大的特點就是能夠截取 Windows 的消息。一旦用戶自定義的窗口函數截取了傳向原窗口函數的消息,就可以對被截取的消息進行如下處理:

將其傳給原來的窗口函數。這是對大多數消息應該采取的措施,因為子類通常只對原來的窗口特性作少量的改動

截取該消息,阻止其向原窗口函數發送。

修改該消息,修改完畢以后再向原窗口函數發送。

Windows SDK 提供了一些設計好的窗口類,如 EDIT  LISTBOX  TREEVIEW 等。通過截取這些通用窗口類的消息,用戶程序可以為它們添加新的特性,改善其外觀,擴充其功能。

子類化的優點主要體現在以下兩個方面:首先,它不需要創建新的窗口類,不需要了解一個窗口的窗口過程。這在原來的窗口函數是由別人編寫,而且創建過程不可見的情況下非常有用;其次,子類化比較容易實現,因為所有要做的工作僅僅就是寫一個窗口函數

 

 VC 中實現窗口子類化

上面介紹的子類化是從 Windows 本身的窗口函數概念來講的,實際上屬于 SDK  Software Development Kit )編程的范疇,在 MFC 中情況有所不同。下面將分別描述在這兩種情況下窗口子類化實現的方法。

 

VC 中基于 SDK 編程的窗口子類化

VC 中基于 SDK 編程的窗口子類化的基本步驟如下:

(1)        正常創建原始窗口,得到窗口的句柄。

(2)        調用 GetWindowLong 得到原來的窗口函數 OldWndProc 

(3)        調用 SetWindowLong 設置新的窗口函數 NewWndProc 

新的窗口函數的代碼如下所示:

LRESULT NewWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)

{

       if(message==WM_IcareIt)

       {

              // 截取自己感興趣的消息,作一些處理,達到改變特性的目的

   }

       // 必要時可以調用原來的窗口函數,使被子類化的窗口仍具有原來的很多特性

   return CallWndowProc(OldWndProc,hWnd,message,wParam,lParam);

}

值得注意的是,在調用舊的窗口函數時,不能直接用 OldWndProc(…) ,而必須用函數 CallWndProc 進行調用,否則會出現堆棧錯誤。

MFC 編程中的窗口子類化

MFC 窗口實際上已經是被子類化的窗口。所有的 MFC 窗口共享同一個 窗口函數,由這個窗口函數根據窗口句柄,查找這個窗口對應的 CWnd 派生類實例,再通過消息映射這個窗口類的消息處理函數。鑒于以上原因,在 MFC 中要子類化一個窗口就比較容易了,因為你的任務只是編寫一個新的 MFC 窗口類而不需要寫一個窗口函數。

假如我們現在有一個對話框,里面有一個編輯控件,我們只希望在該控件中接受非數字字符輸入,我們可以攔截WM_CHAR 消息,在它的處理函數中忽略任何數字的輸入。 MFC 編程中窗口子類化的具體實現步驟在下一節筆者將用一個簡單的實例來加以說明。

 

VC 中窗口子類化的應用舉例

MFC 為廣大編程者提供了很多功能豐富的窗口類,如果能在這些通用窗口類的基礎上進行子類化的話,將會給編程者帶來很多便利。下面舉一個例子來說明 MFC 編程中的子類化是多么的簡單易行。該例完成上面提到的在編輯控件只接受非數字字符輸入的功能。實現這個子類化的基本步驟和相關代碼如下:

 )利用 AppWziard 創建一個基于對話框的程序 SubClassing 

 )對 MFC 提供的標準的對話框中的控件進行修改,刪除 MFC 提供的靜態文本控件,添加自己的一個編輯控件,設置新控件的 ID  IDC_EDIT 。合理布置對話框上各控件的位置,使程序界面布局合理、美觀。

 )用 ClassWizard  CEdit 類派生一個新的窗口類,新窗口的窗口類叫 CNoNumEdit 。截取 CNoNumEdit 類的WM_CHAR 消息,在 OnChar 函中完成忽略任何數字的輸入的處理。實現代碼如下:

void CNoNumEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

{

          TCHAR ch=nChar;

         if(ch>=_T('0')&&ch<=_T('9'))

        {

              AfxMessageBox((" 請不要輸入數字! "),MB_OK);

              // 當輸入數字字符時將被忽略,并顯示警告信息

              return;

        }

        CEdit::OnChar(nChar, nRepCnt, nFlags);// 輸入為非數字字符時調用原處理函數

}

( )在對話框窗口類 CSubClassingDlg 的定義中添加變量 CNoNumEdit ed 。在 CSubClassingDlg::OnInitDialog() 函數中調用 CWnd 類的成員函數 SubClassWindow 進行子類化。

ed.SubclassWindow(GetDlgItem(IDC_EDIT)->m_hWnd);

    在對話框窗口類 CsubClassing  OnDestroy 中調用 ed.UnSubClassWindow() 執行窗口類的反子類化。

現在可以編譯執行這個程序了,當用戶輸入數字字符時將會忽略該輸入,并顯示警告信息。

 

 Windows 編 程中,適當使用窗口子類化技術,可以很方便地達到改變一個窗口的特性的目的。當然子類化也存在其局限性。實際上,子類化的概念是針對一個已經創建的窗口來 談的,所以修改窗口函數是在窗口創建之后進行的,在窗口創建期間的消息無法捕獲,也就無法處理。另外有些窗口的特性與窗口類本身的屬性有關。比如如果一個 窗口類沒有 CS_DBLCLKS 屬性的話,那么要想通過子類化這些窗口達到處理 WM_LBUTTONDBLCLK 消息的目的是無法實現的。對于子類化的以上局限性,可以通過超類化( SuperClassing )技術消除。

posted on 2014-02-21 10:20 厚積薄發 閱讀(917) 評論(0)  編輯 收藏 引用 所屬分類: Windows編程

導航

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

統計

常用鏈接

留言簿

隨筆分類

文章分類

文章檔案

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区视频在线播放| 欧美日本精品| 国产视频久久久久| 西瓜成人精品人成网站| 一级日韩一区在线观看| 国产午夜亚洲精品理论片色戒| 亚洲欧美久久久| 欧美一区二区私人影院日本| 国内外成人免费视频| 久久中文字幕一区| 欧美精品999| 亚洲欧美日韩精品久久久| 欧美成人乱码一区二区三区| 亚洲一区二区综合| 欧美v亚洲v综合ⅴ国产v| 国产精品一级二级三级| 欧美精品国产一区二区| 国产精品视频在线观看| 亚洲专区在线视频| 亚洲女人av| 国产精品久久久对白| 夜夜嗨av一区二区三区| 亚洲黄色有码视频| 亚洲精品免费在线播放| 久久中文欧美| 国产嫩草一区二区三区在线观看| 国产综合久久久久久| 亚洲影院在线观看| 亚洲国产精品久久91精品| 亚洲制服欧美中文字幕中文字幕| 亚洲一区二区三区精品在线观看| 欧美日韩另类一区| 亚洲欧洲一区二区天堂久久| 欧美大片18| 一本色道久久综合亚洲精品高清 | 亚洲婷婷在线| 日韩一区二区免费高清| 国产精品亚洲综合久久| 久久精品国产清高在天天线| 久久久国产视频91| 免费视频一区| 校园春色国产精品| 欧美成人精品一区二区| 亚洲成色777777在线观看影院| 午夜精品视频在线观看一区二区| 99成人在线| 国产自产高清不卡| 亚洲国产精品悠悠久久琪琪 | 最新高清无码专区| 亚洲美女黄网| 国产一区二区三区四区hd| 久久午夜影视| 欧美日韩亚洲高清| 久久久一区二区三区| 欧美成人四级电影| 午夜亚洲性色视频| 免费影视亚洲| 欧美在线国产| 亚洲国产日韩一区| 亚洲精品午夜精品| 国产一区二区在线免费观看| 麻豆精品传媒视频| 欧美性理论片在线观看片免费| 午夜精品影院| 欧美成人午夜免费视在线看片 | 欧美亚洲在线视频| 欧美二区在线看| 亚洲精品国产精品乱码不99按摩| 亚洲激情第一区| 国产精品一区二区三区四区| 亚洲第一在线视频| 久久av红桃一区二区小说| 亚洲精品日本| 久久久久久久久久久成人| 一区二区三欧美| 久久午夜羞羞影院免费观看| 亚洲欧美日韩成人高清在线一区| 久久躁日日躁aaaaxxxx| 久久精品国产第一区二区三区最新章节| 母乳一区在线观看| 久久这里有精品视频| 国产精品一级久久久| 亚洲乱亚洲高清| 亚洲欧洲中文日韩久久av乱码| 欧美一区二区女人| 欧美一区二区成人6969| 久久精品成人| 中文在线不卡视频| 99成人在线| 激情丁香综合| 亚洲性线免费观看视频成熟| 国产综合色产在线精品| 久久婷婷人人澡人人喊人人爽| 欧美日韩精品福利| 裸体丰满少妇做受久久99精品| 欧美a一区二区| 性欧美videos另类喷潮| 久久aⅴ国产紧身牛仔裤| 久久精品视频免费观看| 国产亚洲va综合人人澡精品| 亚洲激情小视频| 亚洲精品字幕| 99一区二区| 欧美日韩一区国产| 亚洲视屏在线播放| 欧美一级电影久久| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲国产精品成人一区二区| 亚洲欧洲精品一区二区精品久久久| 久久精品亚洲精品| 久久深夜福利免费观看| 国内精品久久久久久久影视蜜臀 | 另类专区欧美制服同性| 欧美高清视频一区二区| 国产综合自拍| 久热成人在线视频| 亚洲日本成人网| 亚洲欧美日韩天堂| 国产欧美精品va在线观看| 欧美主播一区二区三区| 欧美91视频| 制服诱惑一区二区| 国产精品一区二区黑丝| 欧美在线综合视频| 亚洲福利视频网站| 亚洲一级黄色av| 国产欧美日韩一区二区三区在线| 久久激情五月激情| 亚洲日本免费电影| 翔田千里一区二区| 亚洲经典三级| 久久夜精品va视频免费观看| 99国产精品| 欧美h视频在线| 亚洲一区中文| 亚洲电影免费观看高清完整版在线观看 | 校园春色国产精品| 亚洲清纯自拍| 久久综合九色综合久99| 正在播放亚洲一区| 亚洲国产精品一区二区www| 欧美日韩精品中文字幕| 久久黄色小说| 亚洲一级在线观看| 欧美激情1区2区3区| 夜夜嗨一区二区三区| 久久久亚洲国产天美传媒修理工 | 99re6热只有精品免费观看| 久久免费视频网| 亚洲欧美激情一区二区| 亚洲激情专区| 在线精品视频免费观看| 国产精品视频精品视频| 男人天堂欧美日韩| 久久久久久夜| 欧美在线一级va免费观看| 日韩午夜剧场| 亚洲人成毛片在线播放| 国产日韩精品一区二区浪潮av| 亚洲欧美日韩国产一区二区| 日韩视频精品在线| 欧美大片在线看免费观看| 久久www成人_看片免费不卡| 一区二区免费在线视频| 亚洲人成在线观看| 亚洲激情视频网站| 亚洲二区免费| 亚洲国产成人一区| 亚洲国产婷婷综合在线精品 | 91久久夜色精品国产网站| 欧美91视频| 欧美福利视频在线观看| 老司机久久99久久精品播放免费 | 国产精品久久久久一区| 欧美网站在线| 国产精品大片| 国产精品香蕉在线观看| 国产精品视频yy9099| 国产精品入口66mio| 国产精品第2页| 国产精品嫩草99a| 国产亚洲欧美日韩一区二区| 国产日韩欧美自拍| 国产一区二区精品久久91| 国产一区二区三区成人欧美日韩在线观看 | 国产精品都在这里| 国产精品久久久久久超碰 | 久久资源av| 欧美高清视频www夜色资源网| 免费看精品久久片| 欧美国产一区二区在线观看| 欧美成人综合一区| 欧美日本国产视频| 欧美中文在线观看| 久久精品在线观看| 国产精品一二三四区| 在线一区二区日韩| 亚洲第一久久影院| 欧美一级大片在线观看| 欧美日韩亚洲视频|