VC实现对话框上信息的显示
2007-04-05 20:14
435 查看
VC实现对话框上信息的显示
利用 VC的AppWizard,可以很容易地实现工具条和菜单项的ToolTip,或在状态条上显示帮助信息,但要在对话框的控件上显示ToolTip和在状态条上显示控件信息并不容易实现。现在,我们用VC中的WM_SETCURSOR 与TTN_NEEDTEXT消息就可达到目的。具体操作如下:
一、利用 VC的 MFC AppWizard 生成一个 SDI 或 MDI 的应用程序
二、编辑对话框控件的字符串资源
例如:IDC_DBBUTTON1 = “This is 肖天鹏的第一自制按钮天鹏",
其中字符串“This is肖天鹏的第一自制按钮“将在鼠标移到控件上时显示在状态条上,字符串“天鹏"将作为 ToolTip 显示。
三、建立消息映射
在对话框的头文件 (*.H) 中
加入以下代码:
protected:
void SetStatusText(UINT nID=0);
//{{AFX_MSG(CFileOp1)
afx_msg void OnDestroy();
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
//}}AFX_MSG
afx_msg BOOL OnTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
DECLARE_MESSAGE_MAP()
在对话框的实现文件 (*.CPP) 中加入以下代码:
BEGIN_MESSAGE_MAP(CFileOp1, CDialog)
//{{AFX_MSG_MAP(CFileOp1)
ON_WM_DESTROY()
ON_WM_SETCURSOR()
//}}AFX_MSG_MAP
ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnTipNotvify)
END_MESSAGE_MAP()
四、编辑消息处理函数
BOOL CFileOp1::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{// TODO: Add your message handler code here and/or call default
if(pWnd==this)
SetStatusText();
else
{TOOLTIPTEXT m_psttt;
m_psttt.hdr.hwndFrom=m_hWnd;
m_psttt.hdr.idFrom=pWnd->GetDlgCtrlID();
m_psttt.hdr.code=TTN_NEEDTEXT;
m_psttt.uFlags= TTF_IDISHWND;
SetStatusText(pWnd->GetDlgCtrlID());
this->SendMessage(WM_NOTIFY,m_psttt.hdr.idFrom,(LPARAM)&m_psttt); }
return CDialog::OnSetCursor(pWnd, nHitTest, message);}
void CFileOp1::OnDestroy()
{SetStatusText();
CDialog::OnDestroy();}
void CFileOp1::SetStatusText(UINT nID)
{if(nID==0)
nID=AFX_IDS_IDLEMESSAGE;
CWnd *pWnd=AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
if(pWnd)
{AfxGetMainWnd()->SendMessage(WM_SETMESS??
AGESTRING ,nID);
pWnd->SendMessage(WM_IDLEUPDATECMDUI);
pWnd->UpdateWindow();}}
BOOL CFileOp1::OnTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{ TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
UINT nID =pNMHDR->idFrom;
if (pTTT->uFlags & TTF_IDISHWND)
{ nID = ::GetDlgCtrlID((HWND)nID);
if (nID)
{ TCHAR szFullText[256];
CString StrTipText;
AfxLoadString(nID,szFullText);
AfxExtractSubString(StrTipText,szFullText,1,′ ′);
if(!StrTipText.IsEmpty())
strcpy(pTTT->lpszText,StrTipText);
pTTT->hinst = AfxGetResourceHandle();
return(TRUE); } }
return(FALSE);}
五、将该对话框作为一个 SDI 或 MDI应用程序的主框架的子窗口,生成这样一个对话框后,当你把鼠标移到某个控件 ( 必须有相应的字符串资源 )上时,就会出现该控件的 ToolTip和状态条信息。
利用 VC的AppWizard,可以很容易地实现工具条和菜单项的ToolTip,或在状态条上显示帮助信息,但要在对话框的控件上显示ToolTip和在状态条上显示控件信息并不容易实现。现在,我们用VC中的WM_SETCURSOR 与TTN_NEEDTEXT消息就可达到目的。具体操作如下:
一、利用 VC的 MFC AppWizard 生成一个 SDI 或 MDI 的应用程序
二、编辑对话框控件的字符串资源
例如:IDC_DBBUTTON1 = “This is 肖天鹏的第一自制按钮天鹏",
其中字符串“This is肖天鹏的第一自制按钮“将在鼠标移到控件上时显示在状态条上,字符串“天鹏"将作为 ToolTip 显示。
三、建立消息映射
在对话框的头文件 (*.H) 中
加入以下代码:
protected:
void SetStatusText(UINT nID=0);
//{{AFX_MSG(CFileOp1)
afx_msg void OnDestroy();
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
//}}AFX_MSG
afx_msg BOOL OnTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
DECLARE_MESSAGE_MAP()
在对话框的实现文件 (*.CPP) 中加入以下代码:
BEGIN_MESSAGE_MAP(CFileOp1, CDialog)
//{{AFX_MSG_MAP(CFileOp1)
ON_WM_DESTROY()
ON_WM_SETCURSOR()
//}}AFX_MSG_MAP
ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnTipNotvify)
END_MESSAGE_MAP()
四、编辑消息处理函数
BOOL CFileOp1::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{// TODO: Add your message handler code here and/or call default
if(pWnd==this)
SetStatusText();
else
{TOOLTIPTEXT m_psttt;
m_psttt.hdr.hwndFrom=m_hWnd;
m_psttt.hdr.idFrom=pWnd->GetDlgCtrlID();
m_psttt.hdr.code=TTN_NEEDTEXT;
m_psttt.uFlags= TTF_IDISHWND;
SetStatusText(pWnd->GetDlgCtrlID());
this->SendMessage(WM_NOTIFY,m_psttt.hdr.idFrom,(LPARAM)&m_psttt); }
return CDialog::OnSetCursor(pWnd, nHitTest, message);}
void CFileOp1::OnDestroy()
{SetStatusText();
CDialog::OnDestroy();}
void CFileOp1::SetStatusText(UINT nID)
{if(nID==0)
nID=AFX_IDS_IDLEMESSAGE;
CWnd *pWnd=AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
if(pWnd)
{AfxGetMainWnd()->SendMessage(WM_SETMESS??
AGESTRING ,nID);
pWnd->SendMessage(WM_IDLEUPDATECMDUI);
pWnd->UpdateWindow();}}
BOOL CFileOp1::OnTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{ TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
UINT nID =pNMHDR->idFrom;
if (pTTT->uFlags & TTF_IDISHWND)
{ nID = ::GetDlgCtrlID((HWND)nID);
if (nID)
{ TCHAR szFullText[256];
CString StrTipText;
AfxLoadString(nID,szFullText);
AfxExtractSubString(StrTipText,szFullText,1,′ ′);
if(!StrTipText.IsEmpty())
strcpy(pTTT->lpszText,StrTipText);
pTTT->hinst = AfxGetResourceHandle();
return(TRUE); } }
return(FALSE);}
五、将该对话框作为一个 SDI 或 MDI应用程序的主框架的子窗口,生成这样一个对话框后,当你把鼠标移到某个控件 ( 必须有相应的字符串资源 )上时,就会出现该控件的 ToolTip和状态条信息。
相关文章推荐
- VC实现对话框上信息的显示
- VC++编程通过Bluetooth API调用对话框选择蓝牙设备并显示设备信息
- vc 基于对话框实现工具条提示显示
- 【VC++】 实现对话框透明显示
- VC中Rich Edit控件实现打印信息显示为指定颜色
- VC 隐藏任务栏,实现对话框的全屏显示
- VC++中鼠标拖动实现两对话框之间信息的转移(优化篇)
- VC MFC 对话框,如何实现鼠标拖动显示一个框,松开鼠标框就消失
- VC++编程通过Bluetooth API调用对话框选择蓝牙设备并显示设备信息
- 用JavaScript弹出的alert对话框中如何实现显示信息的换行
- VC++实现单文档程序的全屏显示及恢复
- 用VC实现PC并行端口数字信息的输入/输出
- javaEE实现数据库信息简单显示在浏览器上
- 乐学成语实现之五:显示每条成语的详细信息
- jsp实现分页显示信息(数据库、EL表达式、连接池)
- vc 实现文字旋转 文字旋转 对话框
- VC++实现全局钩子勾住消息对话框
- Arcgis API for JavaScript在地图上实现手机定位信息的追踪显示
- jquery 页眉单行信息滚动显示实现思路及代码
- VC资源编辑器里对话框的大小和实际的像素尺寸显示问题