往对话框中手工加入工具条、状态栏、工具提示、按钮控件

14 篇文章 0 订阅

我们建立一个开始不带工具条和状态栏的工程。然后手工加入工具条、状态栏和工具提示

1、利用MFC向导创建一个名为CCControlBarDemo的基于对话框的工程

2、在CCControlBarDemoDlg.h文件的头部加入如下的常量定义。

//===============================================
//=======自定义状态栏、工具条和工具提示的命令消息
#define IDC_STATUS 100
#define IDC_TOOLBAR 102
#define IDC_BUTTON1 103
#define IDC_BUTTON2 104
#define IDC_BUTTON3 105

 

3、在CCControlBarDemoDlg类中添加如下的保护型变量。

protected:
 HICON m_hIcon;

 //首先在对话框窗口成员函数中声明工具条、按钮、状态条的对象
 TBBUTTON m_bt[3];                     //create按钮对象数组
 CToolTipCtrl m_ctlMyToolTip;          //Create工具提示对象
 CStatusBarCtrl m_ctlMyStatusBar;      //创建状态条对象
 CToolBarCtrl m_ctlMyToolBar;          //创建工具条对象

4、在CCControlBarDemoDlg类的构造函数中添加如下代码来初始化TBBUTTON结构变量即初始化三个按钮:

CCCControlBarDemoDlg::CCCControlBarDemoDlg(CWnd* pParent /*=NULL*/)
 : CDialog(CCCControlBarDemoDlg::IDD, pParent)
{
 //{{AFX_DATA_INIT(CCCControlBarDemoDlg)
  // NOTE: the ClassWizard will add member initialization here
 //}}AFX_DATA_INIT
 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

 //初始化对话框上的三个按钮
 for(int i=0;i<3;i++)
 {
  m_bt[i].dwData=0;
  m_bt[i].fsState=TBSTATE_ENABLED;
  m_bt[i].fsStyle=TBSTYLE_BUTTON;
  m_bt[i].iBitmap=NULL;
  m_bt[i].iString=i;
 }
 //把按钮ID名关联到对话框对象上
 m_bt[0].idCommand=IDC_BUTTON1;
 m_bt[1].idCommand=IDC_BUTTON2;
 m_bt[2].idCommand=IDC_BUTTON3;
}

5、在CCControlBarDemoDlg类的OnInitDialog()函数中添加如下的代码以创建工具条状态栏和工具提示栏:

BOOL CCCControlBarDemoDlg::OnInitDialog()
{
 CDialog::OnInitDialog();

 // Add "About..." menu item to system menu.

 // IDM_ABOUTBOX must be in the system command range.
 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
 ASSERT(IDM_ABOUTBOX < 0xF000);

 CMenu* pSysMenu = GetSystemMenu(FALSE);
 if (pSysMenu != NULL)
 {
  CString strAboutMenu;
  strAboutMenu.LoadString(IDS_ABOUTBOX);
  if (!strAboutMenu.IsEmpty())
  {
   pSysMenu->AppendMenu(MF_SEPARATOR);
   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  }
 }

 // Set the icon for this dialog.  The framework does this automatically
 //  when the application's main window is not a dialog
 SetIcon(m_hIcon, TRUE);   // Set big icon
 SetIcon(m_hIcon, FALSE);  // Set small icon
 
 // TODO: Add extra initialization here
 //===============================================
 //==================创建状态栏===================
 if(!m_ctlMyStatusBar.Create(WS_CHILD|CCS_BOTTOM|WS_VISIBLE|SBARS_SIZEGRIP,CRect(0,0,0,0),this,IDC_STATUS))
 {
  TRACE0("创建状态栏失败\n");
  return 0;
 }
 //================================================
 //===============创建单个状态栏窗格===============
 int nRight=-1;
 m_ctlMyStatusBar.SetParts(1,&nRight);
 //================================================
 //===================创建工具条===================
 if(!m_ctlMyToolBar.Create(WS_BORDER|WS_VISIBLE|WS_CHILD|CCS_TOP|CCS_ADJUSTABLE|TBSTYLE_TOOLTIPS,CRect(0,0,0,0),this,IDC_TOOLBAR))
 {
  TRACE0("创建工具条失败\n");
  return 0;
 }
 LPCTSTR lpszString=_T("Button1\0Button2  \0Button3  \0\0");
 m_ctlMyToolBar.AddStrings(lpszString);//工具条文本
 m_ctlMyToolBar.AddButtons(3,m_bt);//添加按钮数组对象,有三个按钮
 m_ctlMyToolBar.AutoSize();
 m_ctlMyToolBar.SetRedraw();
 //=================================================
 //===================创建工具提示==================
 if(!m_ctlMyToolTip.Create(this,TTS_ALWAYSTIP|WS_CHILD|WS_VISIBLE))
 {
  TRACE0("创建工具提示失败\n");
  return 0;
 }
 m_ctlMyToolTip.Activate(TRUE);       //激活工具提示栏
 return TRUE;  // return TRUE  unless you set the focus to a control
}

6、为工具提示栏添加TTN_NEEDTEXT消息的处理器。首先在CCControlBarDemoDlg类的头文件中的DECLARE_MESSAGE_MAP()宏之间添加如下代码:

BOOL OnToolTipNotify(UINT id,NMHDR * pTTTStruct,LRESULT * pResult);

在CCControlBarDemoDlg类的实现文件中的BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()宏之间添加如下代码:

ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipNotify)

在CCControlBarDemoDlg类中添加OnToolTipNotify()函数的实现代码:

BOOL CCCControlBarDemoDlg::OnToolTipNotify(UINT id, NMHDR *pTTTStruct, LRESULT *pResult)
{
 TOOLTIPTEXT *pTTT=(TOOLTIPTEXT *)pTTTStruct;
 UINT nID=pTTTStruct->idFrom;

 if(pTTT->uFlags&TTF_IDISHWND)
 {
  nID=::GetDlgCtrlID((HWND)nID);
  if(nID==0)
   return FALSE;
 }
 switch(nID)
 {
 case IDC_BUTTON1:
  pTTT->lpszText="Button1";      //在工具提示栏上显示字符串“Button1”。
  break;
 case IDC_BUTTON2:
  pTTT->lpszText="Button2";
  break;
 case IDC_BUTTON3:
  pTTT->lpszText="Button3";
  break;
 }
 return TRUE;
}

7、在CCControlBarDemoDlg类中添加WM_MOUSEMOVE消息处理函数,并在其中添加如下代码:

//==============================================
//===========鼠标移动函数=======================
void CCCControlBarDemoDlg::OnMouseMove(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default
 CString str;
 str.Format("Cursor Position:%ld,%ld",point.x,point.y);
 m_ctlMyStatusBar.SetText(str,0,SBT_NOBORDERS);
 CDialog::OnMouseMove(nFlags, point);
}

8、最后为工具条上的三个按钮ID_BUTTON1、ID_BUTTON2和ID_BUTTON3定义消息处理函数

 afx_msg void OnButton1();
 afx_msg void OnButton2();
 afx_msg void OnButton3();

在BEGIN_MESSAGE_MP()和END_MESSAGE_MAP()宏之间添加如下代码:

ON_COMMAND(IDC_BUTTON1,OnButton1)
 ON_COMMAND(IDC_BUTTON2,OnButton2)
 ON_COMMAND(IDC_BUTTON3,OnButton3)

在CCControlBarDemoDlg类中添加三个按钮的处理函数:

//================================================
//============按钮处理函数========================
void CCCControlBarDemoDlg::OnButton1()
{
 AfxMessageBox("你按下了工具条的第一个按钮!");
}

void CCCControlBarDemoDlg::OnButton2()
{
 AfxMessageBox("你按下了工具条的第二个按钮!");
}

void CCCControlBarDemoDlg::OnButton3()
{
 AfxMessageBox("你按下了工具条的第三个按钮!");
}

9、现在可以编译运行程序了。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值