按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
MDI 框架的客户区被另一个窗口的框架所覆盖,为了改变客户区的背景色,需要重画这个
客户窗口。为了做到这点,要处理消息 WM_ERASEBKND 产生一个新类,如从 CWnd 继
承一个新类,称为 CMDIClient,具体可见下面的代码片断。
实例 2…5 :改变 MDI 窗口框架的颜色。源代码在光盘中“02实例 2…5TestMDI ”目录下。
#include 〃MDIClient。h〃
class CMainFrame : public CMDIFrameWnd
{
。。。
protected:
CMDIClient m_wndMDIClient;
}
在 CMainFrame 中重载 CMDIFrameWnd::OnCreateClient
·31 ·
…………………………………………………………Page 41……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs; CCreateContext* pContext)
{
if ( CMDIFrameWnd::OnCreateClient(lpcs; pContext) )
{
m_wndMDIClient。SubclassWindow(m_hWndMDIClient);
return TRUE;
}
else
return FALSE;
}
//然后就可以加入对消息 WM_ERASEBKGND 的处理函数。
BOOL CMDIClient::OnEraseBkgnd(CDC* pDC)
{
CBrush brush(RGB(200;100;0));
CRect rect;
GetClientRect(&rect);
pDC…》FillRect(rect;&brush);
return TRUE;
}
程序运行结果如图 2…23 所示,其中框架颜色变成了橘红色,有关该技巧的源代码请参见
附带光盘。
图 2…23 改变 MDI 窗口的框架颜色
·32 ·
…………………………………………………………Page 42……………………………………………………………
第 2 章 应用程序基本框架
2。5。3 工具栏
工具栏由一系列的按钮和间隔(Seperator )组成。一般功能相关的按钮组成一组,各组
MFC 中使
按钮之间以一定的间隔分开 。通常,工具栏作为主框架窗口中的一个子窗口存在。
用 CToolBar 类来封装工具条控件的各种操作,可以在资源编辑器的 ToolBar 上单击鼠标右键,
选择 Insert ToolBar 项,选中一个工具栏后,鼠标左键双击该工具栏就可以编辑,如图 2…24
所示。
图 2…24 添加一个新的 ToolBar 资源
工具栏上所有按钮的图形在资源中实际上是以一个位图文件存在的。在利用 AppWizard
创建的工程中,自动创建的工具栏位图文件名为 ResToolBar。bmp 。在位图中每个按钮占用一
个宽为 16 像素、高为 15 像素的区域。可以用图形工具条及颜色盒绘制按钮的外表,它的属
性包括 ID、长、宽及鼠标指向它时的说明。一般在 CMainFrame 中定义 CToolBar,其实现在
CMainFrame 的 OnCreate 函数中完成,在该函数中用于创建工具栏的具体特征。
在工具栏中嵌入编辑框等控件,可以通过下面的方法:
o 定义一个编辑控件对象,不能是局部变量,否则会被释放掉;
o 调用 Create,惟一注意的是要在工具条中调用。
CRect rect;
m_wndToolBar。GetItemRect(1;&rect);
edit。Create(WS_CHILD|WS_VISIBLE;rect;&m_wndToolBar;ID_EDIT);
实例 2…6 :添加工具栏程序。源代码在光盘中“02实例 2…6MyToolBar ”目录下。
下面是一个 MyToolbar 的示例程序,集中演示了 ToolBar 在框架窗口中的应用。新建一
个空的 Win32 Application 工程,然后加入下面的 MyToolBar。cpp 源文件,按照前面给出的步
骤加入新的工具栏资源,这里工具栏的 ID 设置为 IDR_MYTOOL1 ,其属性如图 2…25 所示。
·33 ·
…………………………………………………………Page 43……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
图 2…25 工具栏属性对话框
#include
#include
#include 〃resource。h〃
class CMyApp:public CWinApp
{
public:
virtual BOOL InitInstance();
};
class CMyWnd:public CFrameWnd
{
public:
~CMyWnd();
CToolBar MyToolBar;
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnButton10();
afx_msg void OnButton11();
afx_msg void OnButton12();
afx_msg void OnButton13();
DECLARE_MESSAGE_MAP()
};
CMyApp MyApp;
BEGIN_MESSAGE_MAP(CMyWnd;CFrameWnd)
ON_WM_CREATE()
ON_MAND(ID_BUTTON40010;OnButton10)
ON_MAND(ID_BUTTON40011;OnButton11)
ON_MAND(ID_BUTTON40012;OnButton12)
ON_MAND(ID_BUTTON40013;OnButton13)
END_MESSAGE_MAP()
BOOL CMyApp::InitInstance()
{
CMyWnd* pCWindow=new CMyWnd;
pCWindow…》LoadFrame(IDR_MYTOOLBAR1);//创建主窗口,加载菜单
m_pMainWnd = pCWindow;
·34 ·
…………………………………………………………Page 44……………………………………………………………
第 2 章 应用程序基本框架
pCWindow…》ShowWindow(m_nCmdShow);
pCWindow…》UpdateWindow();
return TRUE;
}
int CMyWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{