用键盘操作静态链接打开应用程序中的URLs
2006-07-23 11:20:37 来源:WEB开发网核心提示: void CStaticLink::OnSetFocus(CWnd* /*pOldWnd*/){DrawFocusRect();}void CStaticLink::OnKillFocus(CWnd* /*pNewWnd*/){DrawFocusRect();}是不是很简单?即便是用户因为
void CStaticLink::OnSetFocus(CWnd* /*pOldWnd*/)
{
DrawFocusRect();
}
void CStaticLink::OnKillFocus(CWnd* /*pNewWnd*/)
{
DrawFocusRect();
}
是不是很简单?即便是用户因为切换到其它程序而失去焦点(与用Tab移到其它控件相对),它们都能照样工作。
眼光敏锐的读者也许会问:参数在哪里?前面代码段中的 DrawFocusRect 不是实际的 DrawFocusRect。它是我写的一个冒名顶替者,保护类型的 CStaticLink 成员函数,负责实际调用DrawFocusRect 前做一些准备工作。代码如下:
/////////////////////////////////////////////////////////////////////////
// 获得或丢失焦点: 绘制焦点矩形。对于位图,用窗口矩形;文本则用实际文本矩形。
/////////////////////////////////////////////////////////////////////////
void CStaticLink::DrawFocusRect()
{
CWnd* pParent = GetParent();
ASSERT(pParent);
// 计算在哪里绘制焦点矩形,用屏幕坐标
CRect rc;
DWORD dwStyle = GetStyle();
if (dwStyle & (SS_BITMAP|SS_ICON|SS_ENHMETAFILE|SS_OWNERDRAW)) {
GetWindowRect(&rc); // 图像使用全窗口矩形
} else {
// 文本使用文本矩形. 不要忘了选字体!
CClientDC dc(this);
CString s;
GetWindowText(s);
CFont* pOldFont = dc.SelectObject(GetFont());
rc.SetRectEmpty(); // 重要—DT_CALCRECT 展开, 以便起始是空
dc.DrawText(s, &rc, DT_CALCRECT);// 计算文本方块区
dc.SelectObject(pOldFont);
ClientToScreen(&rc); // 转换屏幕坐标
}
rc.InflateRect(1,1); // 周围添加一个像素
pParent->ScreenToClient(&rc); // 转成父窗口坐标
CClientDC dcParent(pParent); // 父窗口的 DC
dcParent.DrawFocusRect(&rc); // 绘制!
}
大多是常规的 GDI 处理——选择字体,转换坐标等等——我只列出关键代码。
- ››键盘样式风格有关设置
- ››静态照片完美合成 美图秀秀幻影动感效果
- ››操作系统资源不足两种方案解决办法
- ››操作DHTML表格的C++对象
- ››操作微软文档的JAVA api项目:Apache POI 3.6发布...
- ››操作系统拾遗之进程和线程
- ››键盘流必备 - Windows 7常用快捷键整理之基础篇
- ››键盘流必备 - Windows 7常用快捷键整理之WIN键篇
- ››键盘流必备 - Windows 7常用快捷键整理之任务栏篇...
- ››键盘流必备 - Windows 7常用快捷键整理之资源管理...
- ››键盘极客 - 使用组合键来关闭Windows 7
- ››操作系统还原:你需要明白的几件事
更多精彩
赞助商链接