最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

自己簡單封裝的一個(gè)CDialog類實(shí)例

 更新時(shí)間:2015年04月20日 10:35:21   作者:司青  
這篇文章主要介紹了自己簡單封裝的一個(gè)CDialog類,實(shí)例分析了自定義封裝CDialog類的相關(guān)技巧,比較簡單易懂,需要的朋友可以參考下

本文實(shí)例講述了自己簡單封裝的一個(gè)CDialog類實(shí)例。分享給大家供大家參考。具體如下:

該代碼比較短小,實(shí)現(xiàn)了消息映射。

Dialog.h頭文件如下:

#include <windows.h>
class CDialog
{
public:
 //一條消息所包含的信息
 struct MAP
 {
  UINT Msg;
  bool (*pf)(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
  int len;
  MAP *pNext;
 };
public:
 WORD m_wRes;//Dialog資源的ID
 //頭、尾指針,用來操作消息列表
 static MAP *m_pHead;
 MAP *m_pEnd;
public:
 bool Show(HINSTANCE,HWND);
 void AddMsg(bool (*fp)(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam),UINT);
 static bool OnClose(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
 static bool OnInit(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
 CDialog();
private:
 static INT_PTR CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
 void InitMap();
};
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow);

Dialog.cpp源文件如下:

#include "Dialog.h"
CDialog* pThis;//保存基類指針
CDialog::MAP* CDialog::m_pHead = NULL;
//窗口過程函數(shù)
INT_PTR CDialog::DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 //遍歷消息列表以查找是否有相應(yīng)的響應(yīng)函數(shù)
 CDialog::MAP* pTemp = m_pHead;
 for(int i = 1;i <= m_pHead->len;++i)
 {
  if(uMsg == pTemp->Msg)
  {
   pTemp->pf(hwndDlg,uMsg,wParam,lParam);
   return FALSE;
  }
  pTemp = pTemp->pNext;
 }
 return FALSE;
}
//創(chuàng)建消息列表
void CDialog::InitMap()
{
 m_pHead = new MAP;
 m_pHead->len = 2;
 m_pHead->Msg = WM_CLOSE;
 m_pHead->pf = OnClose;
 MAP *pNew = new MAP;
 pNew->Msg = WM_INITDIALOG;
 pNew->pf = OnInit;
 pNew->pNext = NULL;
 m_pHead->pNext = pNew;
 m_pEnd = pNew;
}
//消息響應(yīng)函數(shù)
bool CDialog::OnClose(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
 EndDialog(hwndDlg,0);
 return true;
}
CDialog::CDialog()
{
 InitMap();
}
//程序入口函數(shù)
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
 pThis->Show(hInstance,NULL);
 return 0;
}
//顯示Dialog
bool CDialog::Show(HINSTANCE hIns,HWND hParent)
{
 DialogBox(hIns,MAKEINTRESOURCE(m_wRes),hParent,DialogProc);
 return true;
}
//由子類重寫此函數(shù)以在對話框初始化時(shí)進(jìn)行一些操作
bool CDialog::OnInit(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
 return true;
}
//向消息列表中增加消息
void CDialog::AddMsg(bool (*fp)(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam),UINT uMsg)
{
 MAP *pNew = new MAP;
 pNew->Msg = uMsg;
 pNew->pf = fp;
 pNew->pNext = NULL;
 m_pEnd->pNext = pNew;
 m_pEnd = pNew;

 ++m_pHead->len;
}

使用時(shí),只需要把這2個(gè)文件包含進(jìn)去,用資源編輯器創(chuàng)建一個(gè)Dialog,然后再自己寫一個(gè)類,繼承我的CDialog類,把m_wRes這個(gè)成員變更設(shè)為你創(chuàng)建的Dialog的ID,再extern一個(gè)全局變量m_pThis并把this指針賦給它就可以了。

要增加消息響應(yīng)函數(shù)的話,只要在你的類的構(gòu)造函數(shù)里調(diào)用AddMsg()這個(gè)函數(shù),然后再寫你的消息響應(yīng)函數(shù)就好了。

AddMsg有兩個(gè)參數(shù),第一個(gè)參數(shù)是你的消息響應(yīng)函數(shù)名,第二個(gè)參數(shù)是你要響應(yīng)的消息。

示例如下:

#include "MyDlg.h"
#include "resource.h"
//定義一個(gè)指向CDialog的指針并在下面的構(gòu)造函數(shù)中賦值為this
extern CDialog* pThis;
MyDlg App;
MyDlg::MyDlg()
{
 m_wRes = IDD_DIALOG1;
 pThis = this;
 AddMsg(OnCommand,WM_COMMAND);
}
//WM_COMMAND消息響應(yīng)函數(shù)
bool MyDlg::OnCommand(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 MessageBox(hwndDlg,"","",0);
 return true;
}
//WM_INITDIALOG消息響應(yīng)函數(shù)
bool MyDlg::OnInit(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
 MessageBox(hwndDlg,"","",0);
 return true;
}

希望本文所述對大家基于MFC的win32程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • C++無法打開源文件bits/stdc++.h的問題

    C++無法打開源文件bits/stdc++.h的問題

    這篇文章主要介紹了C++無法打開源文件bits/stdc++.h的問題以及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語言實(shí)現(xiàn)數(shù)字炸彈小游戲

    C語言實(shí)現(xiàn)數(shù)字炸彈小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)數(shù)字炸彈小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 詳解C語言之實(shí)現(xiàn)通訊錄

    詳解C語言之實(shí)現(xiàn)通訊錄

    這篇文章主要為大家詳細(xì)介紹了用C語言實(shí)現(xiàn)通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 項(xiàng)目之C++如何實(shí)現(xiàn)數(shù)據(jù)庫連接池

    項(xiàng)目之C++如何實(shí)現(xiàn)數(shù)據(jù)庫連接池

    這篇文章主要介紹了項(xiàng)目之C++如何實(shí)現(xiàn)數(shù)據(jù)庫連接池問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • C++中產(chǎn)生臨時(shí)對象的情況及其解決方案

    C++中產(chǎn)生臨時(shí)對象的情況及其解決方案

    這篇文章主要介紹了C++中產(chǎn)生臨時(shí)對象的情況及其解決方案,以值傳遞的方式給函數(shù)傳參,類型轉(zhuǎn)換以及函數(shù)需要返回對象時(shí),并給對應(yīng)給出了詳細(xì)的解決方案,通過圖文結(jié)合的方式講解的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • 適合新手小白DEV?C++的使用方法

    適合新手小白DEV?C++的使用方法

    Dev-C++是一個(gè)Windows環(huán)境下C/C++的集成開發(fā)環(huán)境(IDE),它是一款自由軟件,遵守GPL,下面這篇文章主要給大家介紹了關(guān)于適合新手小白DEV?C++的使用方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • qt實(shí)現(xiàn)倒計(jì)時(shí)示例

    qt實(shí)現(xiàn)倒計(jì)時(shí)示例

    這篇文章主要介紹了qt實(shí)現(xiàn)倒計(jì)時(shí)示例,需要的朋友可以參考下
    2014-05-05
  • C++11?nullptr實(shí)現(xiàn)初始化空指針

    C++11?nullptr實(shí)現(xiàn)初始化空指針

    避免產(chǎn)生“野指針”最有效的方法,就是在定義指針的同時(shí)完成初始化操作,本文主要介紹了C++11?nullptr初始化空指針,感興趣的可以了解一下
    2022-01-01
  • C++實(shí)現(xiàn)字符串和整數(shù)的相互轉(zhuǎn)換

    C++實(shí)現(xiàn)字符串和整數(shù)的相互轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)字符串和整數(shù)的相互轉(zhuǎn)換的方法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C++有一定的幫助,需要的可以參考一下
    2023-01-01
  • c++將引用或者是指針作為函數(shù)參數(shù)實(shí)現(xiàn)實(shí)參的運(yùn)算

    c++將引用或者是指針作為函數(shù)參數(shù)實(shí)現(xiàn)實(shí)參的運(yùn)算

    這篇文章主要介紹了c++將引用或者是指針作為函數(shù)參數(shù)實(shí)現(xiàn)實(shí)參的運(yùn)算,需要的朋友可以參考下
    2014-05-05

最新評論

城口县| 南投市| 安塞县| 大城县| 台中县| 大冶市| 津南区| 安阳县| 普兰县| 图木舒克市| 新乡县| 囊谦县| 巴林左旗| 罗甸县| 闽侯县| 通渭县| 定南县| 刚察县| 元朗区| 鹿泉市| 长岭县| 遂昌县| 射洪县| 改则县| 阿图什市| 中超| 拜泉县| 密山市| 定南县| 南陵县| 老河口市| 富蕴县| 合阳县| 麟游县| 越西县| 万宁市| 信阳市| 木兰县| 武强县| 札达县| 崇阳县|