如何在按下回车键的时候,CPropertySheet 不关闭整个窗口?
目前我的程序中有一个CPropertySheet,在CPropertySheet中有的第一个CpropertyPage中有一个CListCtrl,在编辑CListCtrl的时候,希望是确定CListCtrl中的编辑项,结果却导致整个CPropertySheet关闭。不知道在哪里可以设置解决这个问题。
[解决办法]
重写PreTranslateMessage, 检查是否是按下的Enter键,然后做相应处理。
[解决办法]
BOOL CXXXPropertySheet::PreTranslateMessage(MSG* pMsg)
{
if(WM_KEYFIRST <= pMsg-> message && pMsg-> message <= WM_KEYLAST)
{
if(pMsg-> wParam == VK_RETURN || pMsg-> wParam == VK_ESCAPE)
return TRUE;
}
return CPropertySheet::PreTranslateMessage(pMsg);
}
[解决办法]
这个简单,重载OnOK为控
VOID CMyPropertySheet::OnOK()
{
}
[解决办法]
1. 可以在你的 proPage 页面放一个 Apply 按钮! 我就是这么干的!
负责保存你的内容。 关闭再点 prosheet 的按钮!
[解决办法]
goodboyws(深夜不眠者(VCMVP)) 的回答比较单纯;
kkkandy(跟时间赛跑)的答案比较彻底.
都不是可以的.
我都用了.
[解决办法]
呵呵
对话框如果不稍作处理 按回车就会退出的
必须加入
virtual void OnOK();
virtual void OnCancel();
然后不进行操作即可
不是设置非默认 也不是简单删除ok cancel按钮的问题
http://www.vckbase.com/document/viewdoc/?id=481
这帖子上说的比较清楚
[解决办法]
ZT(111222)
Title: CPropertyPage检测数据有效性后避免自动关闭
今天用CPropertyPage的派生类接收用户输入的数据.
class CMovieIssueBasicPage : public CPropertyPage
在用户点 "确定 "的时候, 首先要检测数据是否有效, 然后再决定是否进行下一步操作. 一旦数据不符合标准, 要求用户重新输入. 这就要让属性页在数据无效的时候不能自动关闭.
习惯性地重载了OnOK虚函数
void CMovieIssueBasicPage::OnOK()
{
if(IsDataAvailably())
CPropertyPage::OnOK();
}
却发现, 无论IsDataAvailably()函数返回TRUE还是FALSE, 无论CPropertyPage::OnOK();是否被执行到了,属性页都执着地要自动关闭.
难道就不能干预了么?
先看看CPropertyPage::OnOK();前后都干了些什么.
在void CMovieIssueBasicPage::OnOK() 内部设置断点,然后开始调试.
执行到OnOK()的时候, 看Call Stack:
CMovieIssueBasicPage::OnOK() line 137
CPropertyPage::OnApply() line 302
CMovieIssueBasicPage::OnApply() line 337
显然OnOK之前先执行了OnApply(), OnApply里面又干了些什么呢? go to code:
BOOL CPropertyPage::OnApply()
{
ASSERT_VALID(this);
OnOK();
return TRUE;
}
很显然, MFC的属性页默认是通过OnApply调用OnOK的, 那么重载OnApply函数, 通过该函数的返回值就可以决定属性页是否自动关闭了.
最终, 代码写成这样:
BOOL CMovieIssueBasicPage::OnApply()
{
if(!IsDataAvailably())
return FALSE;
return TRUE;
}
--------------------------------------
要想了解函数调用的前前后后, 看Call Stack尤为重要.
[解决办法]
大家都说完了,楼上的深入哪~
[解决办法]
mark
[解决办法]
学习!