[课程]VC对话框的工具栏添加图标
VC对话框的工具栏添加图标,文字,提示信息
(2011-05-14 16:17:46)
转载?
标签: 分类: MFC编程学习
杂谈
OnInitDialog()中
//先导入图标文件,假设有5个工具栏按钮
m_imagelist.Create(24,24,ILC_COLOR24|ILC_MASK,1,1);//创建按图像列
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_Find));//将图像与列表一一关联 m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_Look));
......
UINT array[5]={0};//定义工具栏数组
for(int i=0;i<5;i++)
{
array[i]=9000+i;//为工具栏中每个按钮添加按钮索引
}
m_toolbar.Create(this);//创建工具栏窗口
m_toolbar.SetButtons(array,5);//为工具栏添加5个按钮
//为每个按钮设置名称
m_toolbar.SetButtonText(0,"****"); m_toolbar.SetButtonText(1,"*****"); m_toolbar.SetButtonText(2,"*****"); m_toolbar.SetButtonText(3,"*****");
m_toolbar.SetButtonText(4,"退出系统");
m_toolbar.GetToolBarCtrl().SetButtonWidth(60,200);//设置按钮的宽度
m_toolbar.GetToolBarCtrl().SetImageList(&m_imagelist);//关联图片到按钮上
m_toolbar.SetSizes(CSize(105,60),CSize(28,40));//设置按钮大小
m_toolbar.EnableToolTips(TRUE);//激活提示信息
2. 在C***Dlg.h
//添加事件声明(最好写在AFX_MSG宏外,否则可能出现编译错误)
afx_msg BOOL OnToolTipText(UINT nID, NMHDR* pNMHDR, LRESULT* pResult);
并在盖头文件中添加#include
,否则会提示AfxLoadString错误
3. 在C***Dlg.cpp
//添加消息映射(最好写在AFX_MSG_MAP宏外,否则可能出现编译错误
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW,0,0xFFFF,OnToolTipText)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA,0,0xFFFF,OnToolTipText)
4. 在C***Dlg.cpp中添加OnToolTipText的定义
BOOL OnToolTipText(UINT nID, NMHDR* pNMHDR, LRESULT* pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code ==
TTN_NEEDTEXTW);
// if there is a top level routing frame then let it handle the message
if (GetRoutingFrame() != NULL) return FALSE;
// to be thorough we will need to handle UNICODE versions of the message also !!
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 is actually the HWND of the tool
nID = ::GetDlgCtrlID((HWND)nID);
}
if (nID != 0) // will be zero on a separator
{
AfxLoadString(nID, szFullText);
strTipText=szFullText;
#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;
// bring the tooltip window above other popup windows
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
return TRUE;
}
return FALSE;
}
5. 在字串表中创建相应ID的字串;
6. 编译运行,可以查看效果
VC++对话框添加工具栏
2009-09-24 20:38:57| 分类: vc++例子文章 | 标签: |举报 |字号大中小 订阅
1、添加工具栏资源ID为IDR_TOOLBAR
2、在对话框的类定义中加:
CToolBar m_ToolBar;
3、在OnInitDialog中或其它合适的消息响应中加如下代码:(函数可查看MSDN)
m_ToolBar.Create(this); //创建工具栏
m_ToolBar.LoadToolBar(IDR_TOOLBAR);//加载工具栏 //得出控件条大小.
CRect rect;
CRect rectNow;
GetClientRect(rect);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuer
y,rectNow);
//放置控件条位置
CPoint ptOffset(rectNow.left-rect.left,rectNow.top-rect.top); CRect rcChild;
CWnd* pwndChild=GetWindow(GW_CHILD);
while (pwndChild)
{
pwndChild->GetWindowRect(rcChild);
ScreenToClient(rcChild);
rcChild.OffsetRect(ptOffset);
pwndChild->MoveWindow(rcChild,FALSE);
pwndChild=pwndChild->GetNextWindow();
}
//调整对话框尺寸
CRect rcWindow;
GetWindowRect(rcWindow);
rcWindow.right+=rect.Width()-rectNow.Width();
rcWindow.bottom+=rect.Height()-rectNow.Height();
MoveWindow(rcWindow, FALSE);
//控件条定位
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
//对框居中
CenterWindow();
4、手工添加处理函数
afx_msg void OnBtnXXX();//消息响应函数声明
ON_COMMAND(ID_BTN_XXX/*工具按钮ID*/,OnBtnXXX/*函数名*/)//消息映射
void CXXXDlg::OnBtnXXX(){}//消息处理函数
这是今天遇到的问题,但程序好像不是这样做的,明天再研究看看。