1、我想在程序一运行,但是属性页还没有弹出的时候记录属性页上的默认值,在弹出属性页然后设置之后记录下变化,并且当下次打开属性页时属性页的默认值为上次改动后的值,请问怎么办啊。
2、还有属性页上确定按钮的动作是不是在第一个属性页上的OnOK()里控制啊啊?
3、我现在不同属性页间传递变量是如下使用的,
在属性页a中:
CView *pView = (CView*) this->GetParent();
a的成员 = pView->属性页b->成员变量;
可是每次返回的是未赋值的值,问题处在哪里?
2、还有属性页上确定按钮的动作是不是在第一个属性页上的OnOK()里控制啊啊?
3、我现在不同属性页间传递变量是如下使用的,
在属性页a中:
CView *pView = (CView*) this->GetParent();
a的成员 = pView->属性页b->成员变量;
可是每次返回的是未赋值的值,问题处在哪里?
1. 和对话框一样用控件变量好了;
3. LRESULT QuerySiblings(
WPARAM wParam,
LPARAM lParam
);
OnQuerySiblings( WPARAM wParam, LPARAM lParam )
2。OnOK()是确定你对属性页所作的修改,关闭对话框并发送通知给框架的,OnApply是你对属性页所作的修改都被确认,但对话框仍然有焦点
3。如果是多文档的话
CMDIFrameWnd *pFrame =
(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;// Get the active MDI child window.
CMDIChildWnd *pChild =
(CMDIChildWnd *) pFrame->GetActiveFrame();// or CMDIChildWnd *pChild = pFrame->MDIGetActive();// Get the active view attached to the active MDI child
// window.
CMyView *pView = (CMyView *) pChild->GetActiveView();
单文档类似
to: AkiraChing(水银)、Mackz(在相互)
2、我看MSDN说iSelectPage是激活页的序号,而我的意思是记录下属性页(多个)上所有控件的改变值啊,按照你说的好像是不能吧????1、关于OnOk();我是不太明白DoModal()函数中到底做了那些动作?
究竟是在那一页page的OnOk()上?还是在sheet的OnOk()里那:
我们通常在界面看到的OK按钮到底算是sheet还是各个page上的呢,我自己的实验是如果把动作放在第一个page的OnOk()里则能在不管是那一页的情况下按OK按钮可以出发动作,而如果是放在其它页上则不能完全实现(除非是在动作所在OnOK()的页上)
1。如果你想记录下来page页各个控件的变化值,下次加载时直接载入变化的值,我觉得你可以用注册表或者是文件,每次属性页加载时从注册表中或者从文件中载入变化的值,如果你是要求在程序没有关闭的情况下实现的话,还可以在domodal返回是把变化的值赋予全局变量,加载时再把全局变量的值赋予属性页。
2。OnOK是本页的,OnApply是Sheet的
OnOK和OnApply都是对每个Page的。
如果OnOk()是对每一页的,那为什么我在第一页的OnOK()中的动作在其它页按OK时候都能触发?
to:AkiraChing(水银)
没关系, 我是这样做的,首先声明一个自己的sheet类,然后把所有的page声明为sheet的成员,page上的控件变量为page的成员,在程序循环的外部建立sheet类,并按照各个page类的构造函数中的值进行页面的初始化,当改变页面上的控件值时page类的成员变量也就记录下了改变,当再次打开属性页的时候就是为改动后的记录了。不过如果控件变量为控制型的话则需要另外的类记录下改变。
据我观察sheet的DoModal()函数中好像按照某种顺序调用了各个page的初始化函数,和Onok()等函数,不知道说的对不对。