程序开发应用环境:
VS2005(vc++),wince 6.0 ,MFC;
实现功能:
在图片背景的指定区域如(0,0,100,30)显示当前的系统时间(用时钟控制的,ExtTextOut直接输出时间),并且该区域要能响应鼠标的单击事件.另外对话框的背景图片是外部资源(选择路径);
思路:
捕获所有的的鼠标单击消息(PreTranslateMessage),判断当前单击时所在的点是否被指定区域所包含.
出现问题:
使用ExtTextOut后单击事件就不能正常的捕获了.
VS2005(vc++),wince 6.0 ,MFC;
实现功能:
在图片背景的指定区域如(0,0,100,30)显示当前的系统时间(用时钟控制的,ExtTextOut直接输出时间),并且该区域要能响应鼠标的单击事件.另外对话框的背景图片是外部资源(选择路径);
思路:
捕获所有的的鼠标单击消息(PreTranslateMessage),判断当前单击时所在的点是否被指定区域所包含.
出现问题:
使用ExtTextOut后单击事件就不能正常的捕获了.
- C/C++ code
-
(一)安装时钟 OninitDialog() { ... SetTimer(1,1000,NULL); ... } (二)时钟响应 void CWince_TimeTextDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: Add your message handler code here and/or call default if(nIDEvent==1) { //CDC *pDC=CClientDC(this); CDC *pDC=GetDC(); pDC->SetBkMode(TRANSPARENT); CRect rect(0,0,100,30); Invalidate(); UpdateWindow(); CTime time; time=CTime::GetCurrentTime(); CString strShow; strShow=time.Format(L"%Y-%m-%d %H:%M:%S"); pDC->SetTextColor(RGB(0,0,255)); [color=#FF6600]pDC->ExtTextOut(0, 0, ETO_OPAQUE,NULL,strShow,wcslen(strShow),0);//注释这行捕获鼠标单击正常[/color] ReleaseDC(pDC); } CDialog::OnTimer(nIDEvent); } (3)捕获鼠标点击消息,并响应,现在是任何时候断点跟踪时都会进入if.鼠标没有单击也会进去. BOOL CWince_TimeTextDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->wParam == VK_LBUTTON) { CPoint MousePoint; GetCursorPos(&MousePoint); CRect Nowrect(0,0,100,40); ClientToScreen(Nowrect); if(Nowrect.PtInRect(MousePoint)) { AfxMessageBox(_T("鼠标点击")); } } return CDialog::PreTranslateMessage(pMsg); }
只要鼠标一移动到那个区域就会有响应,而我想要的是单击响应.
这个受用。。。
本文详细介绍了如何在Windows CE6.0环境下,使用MFC框架结合VC++开发工具,实现一个在图片背景中显示系统时间的功能,并确保指定区域能够响应鼠标单击事件。通过捕获所有鼠标单击消息,并判断点击位置是否位于特定区域内,实现在特定区域显示时间的同时,保证单击事件的正确响应。
1万+

被折叠的 条评论
为什么被折叠?



