如何从 MFC 应用程序中调用 .NET 框架
2006-07-20 11:41:42 来源:WEB开发网Figure 2 重新被激活得 Typematic
此时可以看到对话框里显示出了一列缩写信息。敲入“n”代表姓名,“a”代表地址,Typematic 发送相应的字符串到当前窗体或应用程序。这些缩写信息定义在一个静态表中,你可以将它们改为自己的信息:
struct ABBREV {
TCHAR key;
LPCTSTR text;
} MYABBREVS[] = {
{ _T(''n''),_T("Elmer Fudd") },
{ _T(''a''),_T("1 Bunny Way") },
...
{ 0,NULL}
};
当然,在实际开发过程中,你不必硬编码这些信息,你可以提供一个用户界面来定制它,并将其保存在用户配置文件中,以便这一台机器的每一个用户都有不同的设置。
Typematic 示范了一些其它的技巧:如何注册热键来激活你的应用程序(参见 2000 第十二期的专栏)以及如何让静态文本控件接受键盘输入(你必须处理 WM_GETDLGCODE 并返回DLGC_WANTCHARS )。
Typematic 定义了一个专门的静态文本控件 CStaticAbbrev,它既可以显示缩写信息也可以读取加速键。代码如 Figure 3 所示。当用户按下热键。 Typematic 便被唤醒并将焦点定位到该 CStaticAbbrev 控件,等待字符输入。当 CStaticAbbrev::OnChar 获得一个与表中缩写之一匹配的键时,它便隐藏对话框,然后调用辅助函数 SendString 发送文本:
// in CStaticAbbrev::OnChar
if (/* find char in ABBREV table */) {
GetParent()->ShowWindow(SW_HIDE); // hide dialog
SendString(abbrev.text); // send text
}
当 Typematic 将自己隐藏后,Windows 自动将焦点恢复到之前拥有焦点的窗口,这样输入便定下向到用户按热键之前焦点所在的窗口。非常聪明,不是吗?如果你需要将输入定向到一个特定的应用程序或窗口,调用 SendInput 之前一定要确保它是活动的,为此可以调用 SetForegroundWindow 函数。
更多精彩
赞助商链接