国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

自己簡單封裝的一個CDialog類實例

2020-01-26 15:07:43
字體:
來源:轉載
供稿:網友

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

該代碼比較短小,實現了消息映射。

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;//窗口過程函數INT_PTR CDialog::DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){ //遍歷消息列表以查找是否有相應的響應函數 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;}//創建消息列表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;}//消息響應函數bool CDialog::OnClose(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam){ EndDialog(hwndDlg,0); return true;}CDialog::CDialog(){ InitMap();}//程序入口函數int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){ pThis->Show(hInstance,NULL); return 0;}//顯示Dialogbool CDialog::Show(HINSTANCE hIns,HWND hParent){ DialogBox(hIns,MAKEINTRESOURCE(m_wRes),hParent,DialogProc); return true;}//由子類重寫此函數以在對話框初始化時進行一些操作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;}

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

要增加消息響應函數的話,只要在你的類的構造函數里調用AddMsg()這個函數,然后再寫你的消息響應函數就好了。

AddMsg有兩個參數,第一個參數是你的消息響應函數名,第二個參數是你要響應的消息。

示例如下:

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

希望本文所述對大家基于MFC的win32程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 松江区| 苗栗市| 牟定县| 都匀市| 台北市| 安康市| 汶上县| 琼结县| 昭平县| 和顺县| 项城市| 平凉市| 黄大仙区| 玉门市| 勐海县| 遂平县| 嘉定区| 丘北县| 潜江市| 怀集县| 遵义县| 浙江省| 个旧市| 青河县| 衡东县| 汽车| 固镇县| 新丰县| 津南区| 镇江市| 夏津县| 莱西市| 西充县| 当阳市| 阜平县| 吴川市| 荆门市| 西平县| 建平县| 星子县| 古蔺县|