WEB开发网
开发学院软件开发VC 用键盘操作静态链接打开应用程序中的URLs 阅读

用键盘操作静态链接打开应用程序中的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 处理——选择字体,转换坐标等等——我只列出关键代码。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:键盘 操作 静态

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接