📄 00000011.txt
字号:
--===BBS水木清华站∶精华区===--
-===BBS水木清华站∶精华区===-
>* ==> youxu (东子) 提到: *
如何暂时将键盘加速键屏蔽,以便能够将加速键作为普通键处理。
>* ==> ming (明明) 提到: *
你用MFC吗?
不用的话,自己加判断调不调用TranslateAccelerator()就可以吧。
用的话,主窗口(一般都从CFrameWnd继承)中有一个数据成员
m_hAccelTable,置成NULL试试?
>* ==> youxu (东子) 提到: *
m_hAcceltable ,TranslateAccelerator() 都没有哇。
>* ==> ming (明明) 提到: *
TranslateAccelerator() 是标准的Windows API。
m_hAcceltable HELP中没列出来,但你看afxwin.h中calss CFrameWnd的
定义,是 public 的,你可以用的。
你可以定义一个新的Accelerator Table,
ID_NEWACCEL,其中没有任何快捷键的定义,
然后用:
m_hAccelTable = ::LoadAccelerators(AfxGetResourceHandle(),
MAKEINTRESOURCE(ID_NEWACCEL));
发信人: zhangdh (Tree), 信区: Program
我插一句:
youxu的程序是SDI 还是 MDI的?
在MDI中,每种File Type均有自己的菜单,也就有自己的Accelerator Table,
这个Table的句柄不会在MainWnd中保存的. MainWnd中保存的应该是整个程序没有
打开任何一个文件时的Axccelerator Table.这个Acclerator Table应该存在
View or Document 中.
在SDI中,ming的方法很可能是对的.因为程序执行中只有一个Accelerator Table.
发信人: youxu (东子), 信区: Program
发现了一个奇怪的问题,我作了两个加速键表
执行 m_hAccelTable = ::LoadAcc ....
后,新的加速键表是起作用了,但原有的加速键并没有被取消,依然
起作用,也就是说,两个加速键表被合并为一个。
百思不得其解..........
发信人: ming (明明), 信区: Program
有可能。youxu的问题可能也是因为这个,MainFrame 查了 Acclerator Table,
而View又查了自己的。
发信人: youxu (东子), 信区: Program
问题解决了!!!
原来不行的原因正如 zhangdh 所说,本人要屏蔽的加速键表是属于 VIEW
的,
应该这样作:
( 在 View 的某一成员函数中)
CMDIFrameWnd *pFrame = ((CMDIFrameWnd *)AfxGetApp()->m_pMainWnd);
CMDIChildWnd *pChildWnd = pFrame->MDIGetActive(NULL);
bSaveAccelTable = pChildWnd->m_hAccelTable;
pChildWnd->m_hAccelTable = NULL;
-===BBS水木清华站∶精华区===-
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -