对话框编程技巧(收藏)

原创 2004年12月29日 15:55:00
一、如何往基于Dialog的程序添加菜单

[1.1] 先添加菜单(IDR_MENU1)资源,并加上需要的菜单项。
[1.2] 编辑对话框资源IDD_DLGMENUTOOLBAR_DIALOG的属性,在属性对话框中选择IDR_MENU1即可。


[1.3] 假如您不希望在对话框属性中直接设置菜单,而通过代码在程序中动态生成可以采用如下方法:

[1.3.1]在CDlgMenuToolbarDlg类声名中添加成员变量CMenu m_menu
再在CDlgMenuToolbarDlg::OnInitDialog() 中添加如下代码: //加载菜单
m_menu.LoadMenu(IDR_MENU1);
//设置当前菜单
SetMenu(&m_menu);
//当你不需要菜单时可以用 SetMenu(NULL);来取消当前菜单
二、如何往基于Dialog的程序添加工具栏

[2.1] 先添加工具栏(IDR_TOOLBAR1)资源,并画好各个按钮。
[2.2] 在CDlgMenuToolbarDlg类声名中添加成员变量 CToolBar m_wndtoolbar;
[2.3] 在CDlgMenuToolbarDlg::OnInitDialog() 中添加如下代码  //添加一个平面工具条
if (!m_wndtoolbar.CreateEx( this,TBSTYLE_FLAT ,  WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS,
    CRect(4,4,0,0)) ||    !m_wndtoolbar.LoadToolBar(IDR_TOOLBAR1) )
{
    TRACE0("failed to create toolbar/n");
    return FALSE;
}
m_wndtoolbar.ShowWindow(SW_SHOW);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
三、为工具栏添加工具提示

[3.1] 在CDlgMenuToolbarDlg类定义中手工添加消息映射函数的定义,如下黑体部分       //{{AFX_MSG(CDlgMenuToolbarDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnPaint();
    afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()

[3.2] 在CDlgMenuToolbarDlg.cpp添加函数的实现代码 //工具栏提示
BOOL CDlgMenuToolbarDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
{
    ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
    
    // UNICODE消息
    TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
    TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
    //TCHAR szFullText[512];
    CString strTipText;
    UINT nID = pNMHDR->idFrom;
    
    if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
        pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
    {
        // idFrom为工具条的HWND 
        nID = ::GetDlgCtrlID((HWND)nID);
    }
    
    if (nID != 0) //不为分隔符
    {
        strTipText.LoadString(nID);
        strTipText = strTipText.Mid(strTipText.Find('/n',0)+1);
        
#ifndef _UNICODE
        if (pNMHDR->code == TTN_NEEDTEXTA)
        {
            lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
        }
        else
        {
            _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
        }
#else
        if (pNMHDR->code == TTN_NEEDTEXTA)
        {
            _wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));
        }
        else
        {
            lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
        }
#endif
        
        *pResult = 0;
        
        // 使工具条提示窗口在最上面
        ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE|
            SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); 
        return TRUE;
    }
    return TRUE;
}

[3.3] 在CDlgMenuToolbarDlg.cpp中添加消息映射,请看如下代码中的黑体部分 BEGIN_MESSAGE_MAP(CDlgMenuToolbarDlg, CDialog)
    //{{AFX_MSG_MAP(CDlgMenuToolbarDlg)
    ON_WM_PAINT()
    ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipText )
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

四、其它
为了使你的程序看起来更酷,还可以在CDlgMenuToolbarDlg::OnPaint()中修改代码实现Dialog 填充颜色。
CPaintDC dc(this);
CRect rect; 
GetClientRect(rect); 
dc.FillSolidRect(rect, RGB(60,110,170)); 

对话框编程技巧

一、如何往基于Dialog的程序添加菜单[1.1] 先添加菜单(IDR_MENU1)资源,并加上需要的菜单项。[1.2] 编辑对话框资源IDD_DLGMENUTOOLBAR_DIALOG的属性,在属性...
  • goingup
  • goingup
  • 2005年08月17日 23:30
  • 655

深入理解C#:编程技巧总结(一)

深入理解C#:编程技巧总结(一) 1.实现多态性的两种方式:继承抽象类、实现接口其实就是协变的应用,通过把对象向上转型为基类或接口类型,对它调用成员,可实现多态性,即运行时调用的是对应对象的实现版本成...
  • srf4200
  • srf4200
  • 2017年01月09日 22:25
  • 143

Delphi编程技巧

◇[DELPHI]网络邻居复制文件 uses shellapi; copyfile(pchar(newfile.txt),pchar(//computername/direction/targer.t...
  • crystal521
  • crystal521
  • 2005年07月28日 13:50
  • 869

Delphi 编程技巧汇集

 (出处:www.delphibbs.com)
  • gojob_2005
  • gojob_2005
  • 2006年09月05日 20:56
  • 926

编程技巧网址收藏

http://www.knowsky.com  动态网站制作指南http://evil.2ec.cn/default.asp html、CSS等编程技巧http://blog.csdn.net/Lat...
  • SAINO
  • SAINO
  • 2007年10月23日 20:11
  • 392

C语言高效编程技巧

  编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教。   第1招:以空间换时间   计算机程序中最大的矛盾是空间和时间的矛盾,那么...
  • belowsky
  • belowsky
  • 2007年01月13日 05:20
  • 496

python的30个编程技巧

从公众号上看到了一篇文章《30个python编程技巧!》,觉得有些挺有用的,有的也一直在用,就挨个实现了一下。    1、原地交换两个数字 In [1]...
  • u014157632
  • u014157632
  • 2017年12月02日 16:30
  • 112

python优雅编程技巧

"""python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素.集合对象还支持union(联合), intersection(交), difference(...
  • xuejianhui
  • xuejianhui
  • 2016年04月06日 20:37
  • 915

单片机编程开发技巧

工作了7个月之久,对单片机的编程也开始慢慢熟悉起来,以前总是知道单片机就是定时器,状态机,中断这些东西结合起来效率是相当高的,但是自从接手开发GPF这个芯片之后,我发现了另外一种单片机的开发技巧,高手...
  • morixinguan
  • morixinguan
  • 2016年06月27日 12:05
  • 2796

Python优雅编程技巧

Python开发的10个小技巧标签(空格分隔): Python1. 列表推导式需求:把list所有成员元素加倍。 普通的方式:bag = [1,2,3,4,5] for i in range(len...
  • xuejianhui
  • xuejianhui
  • 2016年04月05日 19:16
  • 300
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对话框编程技巧(收藏)
举报原因:
原因补充:

(最多只允许输入30个字)