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

用键盘操作静态链接打开应用程序中的URLs

 2006-07-23 11:20:37 来源:WEB开发网   
核心提示: 所以当用户用 Tab 键移到链接时,我用空格键来导航到链接,用键盘操作静态链接打开应用程序中的URLs(5),为了实现导航,你必须处理两个消息,返回的错误代码是5,在 WinError.h 中是ERROR_ACCESS_DENIED,WM_CHAR 肯定是其中之一:void CStatic

所以当用户用 Tab 键移到链接时,我用空格键来导航到链接。为了实现导航,你必须处理两个消息。WM_CHAR 肯定是其中之一:

void CStaticLink::OnChar(UINT nChar,...)
{
  if (nChar==VK_SPACE) {
   Navigate();
  }
}   

但是在你的静态链接能够得到 WM_CHAR 消息之前,你必须告诉对话框你对这个消息感兴趣。通常静态控件得不到 WM_CHAR 消息(记住:因为它们是静态的)。有一个特殊的消息可以告诉对话框你想得到什么——这个消息就是 WM_GETDLGCODE:

UINT CStaticLink::OnGetDlgCode()
{
  // 告诉对话框我想要 chars
  return DLGC_WANTCHARS;
}

完成上述工作便万事俱备。现在当用户用 Tab 键到达超链接上时,按下空格键便可以导航了。酷。

最后是一个警告:小心选择正确的静态链接Tab顺序。你的超链接通常应该在Tab顺序的最后,即使它们出现在对话框的最前面。你可能不想让你的对话框一启动输入焦点就落在公司( ACME )标徽链接上。并且如果你在具有其它控件的窗体/对话框中使用 CStaticLink,你可能不想Tab键从某个编辑框跳过超链接到另外一个编辑框或按钮。所以我的忠告是保持所有超链接在Tab顺序的最后,除非你有充足的理由不这样做。

我写了一个例子程序 LinkTest,它使用新的具备键盘操作能力的 CStaticLink。请下载代码参考细节

我有一个 MFC 程序,调用 ShellExecute 来打开一个 Web 页面。如:

ShellExecute "http://www.microsoft.com"

在我使用托管扩展前,运行正常,但是一使用托管扩展它就不行了。返回的错误代码是5,在 WinError.h 中是 ERROR_ACCESS_DENIED。我不懂为什么会存取失败。ShellExecute 不能与托管扩展一起用吗?

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

Tags:键盘 操作 静态

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