{S0}简介
假设你有一个对话框,您可以在其中输入文本和文本有关的其他资料。虽然应该格式化文本,正常的数据项不应该的。所以,放置到您的对话框中,有你需要的所有格式按钮的工具栏,并找出,它会停靠在你的对话框的边缘。但我(客户)希望这件事情,它属于:能够在格式文本输入正确。
为了达到客户的需要,有一点点更多的参与不仅仅是放置一个按钮在中间的一种形式行。创建工具栏步骤一
像往常一样创建一个工具栏,添加CToolBar的成员,您的对话,给它任何适合你的名字。对于一个格式化工具栏类似m_wndFormatBar的名字听起来很不错。
,当场在创建一个静态控制,你想居住在工具栏。此帧ID(即IDC_STC_TOOLBARFRAME)。稍微大一点的工具,所以你可以看到工具栏所占用的空间,成为。在类向导中,分配到这个控制的成员。确保它被分配到CStatic的,而不是CString的。将它命名为任何你想要的(像m_Stc_ToolbarFrame)。第二步
现在到了最困难的部分。在你的对话框的OnInitDialog方法,将下面的代码。 / /定位工具栏,您可以省略的意见。CSIZE sizeToolbar;CRECT mrect;mrect.SetRectEmpty();/ / attach命令路由到对话窗口m_wndFormatBar.Create(本);m_wndFormatBar.LoadToolBar(IDR_TOOLBAR_FORMAT);m_wndFormatBar.SetBarStyle(CBRS_ALIGN_TOP | CBRS_TOOLTIPS | CBRS_FLYBY);m_wndFormatBar.ShowWindow(SW_SHOW);/ /计算工具栏的大小,静态控制和调整大小以适应大小sizeToolbar = m_wndFormatBar.CalcFixedLayout(假,TRUE);
m_Stc_ToolbarFrame.GetWindowPlacement(AMP; WPL);wpl.rcNormalPosition.bottom = wpl.rcNormalPosition.top
; sizeToolbar.cy 4;wpl.rcNormalPosition.right = wpl.rcNormalPosition.left
160; sizeToolbar.cx 4;/ /位置的静态的控制和工具栏m_Stc_ToolbarFrame.SetWindowPlacement(AMP; WPL);m_wndFormatBar.SetWindowPlacement(AMP; WPL);/ /调整到静态控制按钮m_Stc_ToolbarFrame.RepositionBars(AFX_IDW_CONTROLBAR_FIRST AFX_IDW_CONTROLBAR_LAST,0);m_Stc_ToolbarFrame.ShowWindow(SW_HIDE);这是如何工作的
m_wndFormatBar.Create(这)告诉工具栏,窗口的命令将被发送。加载的图像,设置酒吧风格和显示的工具栏是相当明显的。然后你计算工具栏的大小,并相应调整静态控制的大小具有一定的余量。
完成之后重数值的考虑,我们把静态控制,并在其腿上的工具栏。 m_Stc_ToolbarFrame.RepositionBars告诉的工具栏的窗口,它应依偎高达。然后,使静态控制消失。
省略线或做计算错误将被判处怪异的光学效果和您的应用程序的奇怪行为。检查出来。
虽然是很简单的命令路由,这些命令的视觉更新是有点棘手。第三步
UpdateCommandUI处理程序添加到您的对话框和编辑的方法,你会在每一帧/视图应用程序,。不要照顾,当他们这样做似乎并没有工作。其实,他们不能。第四步
添加一行:#include"afxpriv.hquot;
在对话框的cpp文件的顶部,或把里面的stdafx.h中。在你的对话框的头文件放线:LRESULT OnKickIdle AFX_MSG(WPARAM,LPARAM);
里面的消息映射。最好的地方是一个行/ /}} AFX_MSG DECLARE_MESSAGE_MAP()行之间的行。如果没有行,然后按返回。看在你的对话框的cpp文件END_MESSAGE_MAP()字。在该行之前,输入ON_MESSAGE(WM_KICKIDLE,OnKickIdle)。如果您忘记了包括afxpriv.h编译器会告诉你,它不知道任何有关WM_KICKIDLE。 (顺便说一下,这个消息意味着有人袖手旁观踢?)
OnKickIdle例行的身体添加到您的对话框类,并调用本CommandUpdateUI处理程序。怎么样?有一个look.LRESULT CArbitraryToolbarDlg:OnKickIdle(WPARAM,LPARAM){ CCmdUI cmdUI; cmdUI.m_nID = ID_FORMAT_BOLD; / /命令ID / /告诉对话框调用UpdateCommandUI例行 cmdUI.DoUpdate(这一点,FALSE); cmdUI.m_nID = ID_FORMAT_DURCHSTRICH; cmdUI.DoUpdate(这一点,FALSE); cmdUI.m_nID = ID_FORMAT_KURSIV; cmdUI.DoUpdate(这一点,FALSE); cmdUI.m_nID = ID_FORMAT_UNTERSTRICH; cmdUI.DoUpdate(这一点,FALSE); cmdUI.m_nID = ID_EDIT_CUT; cmdUI.DoUpdate(这一点,FALSE); cmdUI.m_nID = ID_EDIT_COPY;
; cmdUI.DoUpdate(这一点,FALSE); cmdUI.m_nID = ID_EDIT_PASTE; cmdUI.DoUpdate(这一点,FALSE);
; 返回TRUE;}第五步...
添加命令处理程序,并对其进行测试。喝了一杯咖啡。
在这整个过程中你应该与矿源代码。你可能适应您的需求,可能不会改变,我不能告诉。这是只教经验,你的经验。
提供的样本只有第7个按钮。这是由设计!毕竟,这是一个示例不是一个完整的的成熟的应用程序。
挤压RichEditCtrl例程将是即将推出自己的类。敬请关注。
看了这么久后,我问你一个人情?我的小兄弟已发送在中东战争,现在,就请你为他祈祷,因此他将返回安然无恙?谢谢。