如何在对话框应用程序上动态的建立一个菜单一个工具栏?用代码实现比如我有
CToolBar toolbar;
CMenu menu;
而且他们的ID分别为IDR_TOOLBAR, IDR_MENU.
应该在哪个函数创建它们?怎么建立?能否给些代码?
CToolBar toolbar;
CMenu menu;
而且他们的ID分别为IDR_TOOLBAR, IDR_MENU.
应该在哪个函数创建它们?怎么建立?能否给些代码?
解决方案 »
- listcontrol控件的movewindows()使显示区域越来越小!!!
- 流媒体或网络电视
- VC6 编译出现One or more files are out...
- 关于时间输入的问题,请指点一下!
- radio button 如何响应鼠标左键操作?我是新人问题比较白痴请见谅
- 一个有难度的视图, 急, 求助高手v
- 请问谁了解甘特图(Gant)----->>>>
- crecordset 类派生的对象可以执行SQL语句吗? 我想执行这样的语句 select pzid from table1 a,table2 b where a.xm=b.bm 怎样实现青帮忙
- 不同sql server 2000中的数据库如何转移
- 请问高手:如何在VC下的CONSOLE工程中实现类似于OUTTEXTXY()的功能?谢谢!
- 大讨论(UP 有分)!! OCX 中接口方法参数中带一个任意类型的数据的实现
- 100分求Windows程序设计(第五版)的配套光盘源代码。
AppendMenu
in msdn
1) 增加菜单
用Menu Editor创建新菜单,或者从另一个工程中拷贝一个。甚至可以创建一个新的S D I
应用程序,并从其. r c文件中获取器菜单并将其粘贴到本对话框应用程序的. r c文件。
用Dialog Editor将该菜单增加到应用程序的对话框模板。
用C l a s s Wi z a r d为对话框类增加命令消息处理函数以处理这些菜单项。
2) 增加工具栏
用Toolbar Editor创建新工具栏,或者如上所述的最后步骤从另一个工程中拷贝。
由于Dialog Editor不允许在模板中添加工具栏控件,所以需要用自己的对话框类动态地
创建一个。确定创建该工具栏的位置的一个好办法是用Dialog Editor在要添加工具栏的地方
创建一个静态控件占位符( p l a c e h o l d e r ),然后将该控件的位置和大小传送给创建中的工具栏。
因此用Dialog Editor来增加静态控件到要添加工具栏的对话框模板,将可以使工具栏看起来
又细又长。
在对话框类中嵌入C To o l b a r变量:
C Toobar m_wndTo o l B a r ;
在对话框类的O n I n i t D i a l o g ( )消息处理函数内创建工具栏:
if ( !m_wndTo o l B a r.Create( this ) ||
! m _ w n d To o l B a r. L o a d ToolBar( IDR_MAINFRAME ) )
{
TRACE0( “Failed to create toolbar\n” );
return -1; // fail to create
}
在先前用对话框编辑器创建的静态控件内定位工具栏:
CRect rect;
GetDlgItem( IDC_TO O L B A R _ S TATIC ) -> GetWindowRect( &rect );
S c r e e n ToClient( &rect );
m _ w n d To o l B a r. M o v e Window( &rect );
3) 增加状态栏
用String Table Editor定义状态栏窗格:
I D _ I N D I C ATOR_ONE “xxx”
I D _ I N D I C ATOR_TWO “yyy”
再次使用Dialog Editor向对话框模板中将要添加状态栏的位置上添加静态控件。
在对话框类中嵌入一个状态栏控件:
CStatusBar m_wndStatusBar;
将用String Editor创建的状态窗格列表增加到对话框类代码的顶部:
static UINT indicators[] =
{
I D _ S E PA R ATO R , // status line indicator
I D _ I N D I C ATO R _ O N E ,
I D _ I N D I C ATO R _ T W O ,
} ;
创建状态栏并将其定位于静态控件之上:
if ( !m_wndStatusBar.Create(this, WS_CHILD|WS_VISIBLE|WS_BORDER) ||
! m _ w n d S t a t u s B a r.SetIndicators( indicators,
sizeof( indicators )/sizeof( UINT ) ) )
{
TRACE0( “Failed to create status bar\n” );
return -1; // fail to create
}
GetDlgItem( IDC_STAT U S B A R _ S TATIC ) -> GetWindowRect( &rect );
S c r e e n ToClient( &rect );
m _ w n d S t a t u s B a r. M o v e Window( &rect );
4. 注意
■ 由C S t a t u s B a r创建的状态栏中的第一个窗格没有边界。虽然这对S D I或者M D I应用程序
没有什么影响,因为状态栏一般是位于视图的下方,但在对话框应用程序中该窗格实际上却
消失在对话框窗口内了。为了使该窗格具有明确的边界可以在状态栏创建后使用下列代码:
UINT nID, nStyle;
int nW i d t h ;
m _ w n d S t a t u s B a r.GetPaneInfo( 0, nID, nStyle, nWidth );
m _ w n d S t a t u s B a r.SetPaneInfo( 0, nID, SBPS_STRETCH, nWidth );
■ 正如工具栏和状态栏必须手工增加一样,程序员还要负责手工更新它们的状态。对工
具栏就意味手工变灰或者检查各个按钮,对状态栏则意味着手工设置每个窗格的文本。
■ 如果已经实现菜单,可以从对话框应用程序的系统菜单中删除帮助菜单项,然后在对
话框类中删除其支持逻辑代码。
2)创建状态栏
创建状态条的代码:
m_StatusBar = new CStatusBarCtrl;
m_StatusBar->Create(WS_CHILD|WS_VISIBLE|SBT_OWNERDRAW,
CRect(0,0,0,0), this, 0);int strPartDim[4]= {180, 260, 340, -1};
m_StatusBar->SetParts(4, strPartDim);m_StatusBar->SetText(_T("Dialog / StatusBar / Toolbar"),0,0);
m_StatusBar->SetText(_T("Example"), 1, 0);CString string;
string.LoadString(IDS_MYCOMPUTER);
m_StatusBar->SetText(string, 3 ,SBT_NOBORDERS );
m_StatusBar->SetIcon(3,
SetIcon(AfxGetApp()->LoadIcon(IDI_COMP),
FALSE));
WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS |
CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!toolbar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}