荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 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软件 网络书店