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