荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Peter (小飞侠), 信区: Program
标 题: vc faq(10)
发信站: BBS 荔园晨风站 (Tue Jan 26 22:51:18 1999), 转信
> ==> 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 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店