自己动手封装SDK界面库

来源:互联网 发布:linux服务器搭建云盘 编辑:程序博客网 时间:2024/05/17 23:12

更新了整个库的结构,最近在看Effective C++ Second Edition。收获很多,结构上根据新的心得体会,改进的整体框架。

目前的类层次结构为: CKWnd

                                      |                        |                  |              

                               CTabCtrl          CListCtrl     Combobox        

 

 

更改类层次结构后的库:http://download.csdn.net/source/739079

Sample范例,包括了dll,lib,头文件和一个应用使用这套库的简单程序(一个用KWnd界面库写的HOOK MessageBoxA,的小DEMO)

 

让MFC见鬼去吧,我们只需要C++基本组件就能跑的应用程序。

花了2天时间,搞了个自己的界面库,封装了大部分的WIN SDK,就象MFC那样使用,可以继承基类CKwnd,通过BEGIN_MSG_MAP来使用消息映射。当然,因为刚开始,功能不太多,只封装了一个基本CKWnd和CTabCtrl。

有兴趣的可以大家一起交流下我的QQ 5192747

消息映射如下所示:

class KWNDLIB_API CTabCtrlWnd : public CKWnd{public:CTabCtrlWnd();virtual ~CTabCtrlWnd();public:virtual BOOL InsertTab(INT iIndex, LPCTSTR szTabName, CKWnd* pSheetFormView);protected:std::map<INT, DWORD>m_TabMap;CKWnd*m_pCurTabSheet;protected:virtual void SetTabSheetPosiont(INT iIndex,CKWnd* pSheetFormView);virtual void SwitchTabSheet(INT iIndex);virtual void OnLButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);BEGIN_MSG_MAPMESSAGE_HANDLER(WM_LBUTTONUP, OnLButtonUp);END_MSG_MAP};

 bHandled如果赋为TRUE,本消息将不发送给Windows默认消息处理函数处理。如果为FALSE,则发送。

 

 

-------------------------------------------------------------------------------------------------------------------------------------------------------

Sample代码摘抄

Stdafx.h--------------------------------------------------------------------------------------------------

#include "KWndLib/KWndInit.h"#include "KWndLib/KWnd.h"#include "KWndLib/TabCtrlWnd.h"#include "KWndLib/App.h"#pragma comment(lib,"KWndLib/KWndLib.lib")

 

WinMain.cpp--------------------------------------------------------------------------------------------

  1. #include "MainFrame.h"
  2. #include "mssapp.h"
  3. int APIENTRY WinMain(HINSTANCE hInstance,
  4.                      HINSTANCE hPrevInstance,
  5.                      LPSTR     lpCmdLine,
  6.                      int       nCmdShow)
  7. {
  8.     InitCommonControls();
  9.     CMssApp app;
  10.     GetApp()->AppInit(hInstance);
  11.     CMainFrame  *pMainFrame;
  12.     pMainFrame = new CMainFrame();
  13.     GetApp()->SetMainFrame(pMainFrame);
  14.     pMainFrame->CreateKWindow((LPCTSTR)IDD_MAINFRAME,Postion_CenterScreen);
  15.     GetApp()->Run((LPCTSTR)IDC_MEMORYSNAPSHOT);
  16.     return 0;
  17. }

 

MainFrame.h-----------------------------------------------------------------------------------------------------------

#include "MemoryFormView.h"#include "ProcessFormView.h"class CMainFrame : public CKWnd{public:CMainFrame();virtual ~CMainFrame();protected:virtual BOOL OnInit();virtual BOOL OnClose();protected:CTabCtrlWndm_TabCtrl;CProcessFormViewm_ProcessFormView;CMemoryFormViewm_MemoryFormView;};

 MainFrame.cpp--------------------------------------------------------------------------------------------------------

 

#include "stdafx.h"#include "MainFrame.h"#include "resource.h"CMainFrame::CMainFrame():CKWnd(){}CMainFrame::~CMainFrame(){}BOOL CMainFrame::OnInit(){CKWnd::OnInit();m_TabCtrl.BindWindow(::GetDlgItem(GetHandle(),IDC_TABCTRL));m_ProcessFormView.CreateKWindow((LPCTSTR)IDD_FORMVIEW,Postion_Default,m_TabCtrl.GetHandle(),SW_HIDE);m_MemoryFormView.CreateKWindow((LPCTSTR)IDD_FORMVIEW1,Postion_Default,m_TabCtrl.GetHandle(),SW_HIDE);m_TabCtrl.InsertTab(0,_T("Process"), &m_ProcessFormView);m_TabCtrl.InsertTab(1,_T("Memory"), &m_MemoryFormView);return FALSE;}BOOL CMainFrame::OnClose(){if(::MessageBox(GetHandle(),"是否关闭本程序?","关闭",MB_ICONWARNING | MB_YESNO) == IDNO)return TRUE;return FALSE;}

 

 

 

                                                                                                                                       A-KIM 2008-07-09

原创粉丝点击