自己动手封装SDK界面库

更新了整个库的结构,最近在看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	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_MAP

	MESSAGE_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:

	CTabCtrlWnd			m_TabCtrl;

	CProcessFormView	m_ProcessFormView;

	CMemoryFormView		m_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

你可能感兴趣的:(自己动手封装SDK界面库)