请各位帮帮小弟,谢谢!!
1、用VC6所生成的对话框如果按下F1就会提示 XXX.hlp 没有找到,我想屏蔽这个功能,请问怎么解决?
2、我想在对话框A中生成另一个对话框B(两个对话框的位置可以移动的),这个对话框B是总在该对话框A的最前面,但是对话框A和对话框B同时可以进行操作,请问怎么解决?
问题点数:100、回复次数:14Top
1 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-12-03 18:27:37 得分 20
BEGIN_MESSAGE_MAP(CYourApp, CWinApp)
...
ON_COMMAND(ID_HELP_FINDER, OnHelpFinder)
ON_COMMAND(ID_HELP, OnHelp)
ON_COMMAND(ID_CONTEXT_HELP, OnContextHelp)
ON_COMMAND(ID_DEFAULT_HELP, OnHelpFinder)
...
END_MESSAGE_MAP()
自己实现OnHelp等方法,这些方法可以代码。
Top
2 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-12-03 18:28:44 得分 20
CADialog::OnInitDialog()
{
CDialog::OnInitDialog();
SetWindowPos(pADialog,0,0,0,0,SWP_NOSIZE);
...
}Top
3 楼koko1998(高价购买火车票)回复于 2004-12-03 19:45:30 得分 0
使用SetWindowPos函数将对话框B总设置为最前方
两个对话框是非模式的Top
4 楼zyp2kyear(E腾鸟)回复于 2004-12-03 19:51:08 得分 0
UP,充电中Top
5 楼superhandsome(帅得要崩溃)回复于 2004-12-03 19:53:50 得分 20
1。你建立工程的时候,选择不需要上下文帮助~ 或者你自己实现帮助的代码。
2。你将B对话框做成是非模式的。~
CBDialog bDialog;
bDialog.Create();
bDialog.Show();
Top
6 楼pleasehelpme(革命尚未成功,同志仍需努力)回复于 2004-12-03 20:29:08 得分 0
同上Top
7 楼luxin24(海洋)回复于 2004-12-03 20:41:52 得分 20
第一个问题可以通过重载pretranslatemessage来过滤消息:
在初始化里:
RegisterHotKey(m_hWnd,0Xafff,0,VK_F1);
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message==WM_HOTKEY && pMsg->wParam==0Xafff)
{
MessageBox("");
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}Top
8 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2004-12-03 20:53:31 得分 0
WM_TOPMOST,SetWindowPosTop
9 楼hongzm(西门吹牛)回复于 2004-12-03 21:49:50 得分 0
学习~Top
10 楼as2001(天行者)回复于 2004-12-03 23:53:43 得分 0
第二个问题还没有解决,请各位继续帮帮小弟!!谢谢!!Top
11 楼as2001(天行者)回复于 2004-12-08 17:51:04 得分 0
第二个问题还没有解决,请各位继续帮帮小弟!!谢谢!!Top
12 楼flinming(flinming)回复于 2004-12-08 18:21:28 得分 0
PreTranslateMessage
通过窗体拦截消息,看是否可以吧F1按键拦截Top
13 楼koko1998(高价购买火车票)回复于 2004-12-08 18:30:25 得分 20
long OldProc = NULL;
LRESULT CALLBACK WindowProce(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if(uMsg == WM_COMMAND && wParam == ID_HELP)//F1 key
AfxMessageBox("help");
return CallWindowProc((WNDPROC)OldProc, hWnd, uMsg, wParam, lParam);
}
在CMainFrame::OnCreate里加上
OldProc = SetWindowLong(this->GetSafeHwnd(), GWL_WNDPROC, (long)(WindowProce));
可以把F1按键拦截
Top
14 楼as2001(天行者)回复于 2005-01-11 19:09:30 得分 0
谢谢!!Top




