首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么在按下回车键的时候,CPropertySheet 不关闭整个窗口

2012-01-24 
如何在按下回车键的时候,CPropertySheet 不关闭整个窗口?目前我的程序中有一个CPropertySheet,在CProperty

如何在按下回车键的时候,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
[解决办法]
学习!

热点排行