解析MFC具体过程中,有个地方我不明白。对您来说很简单
BOOLMyWindow::PreCreateWindow(CREATESTRUCT&cs){CFrameWnd::PreCreateWindow(cs);cs.cx=2...
BOOL MyWindow::PreCreateWindow(CREATESTRUCT &cs)
{
CFrameWnd::PreCreateWindow(cs);
cs.cx=2000;
return TRUE;
};
继承了CFrameWnd,改写PreCreateWindow()
CFrameWnd::PreCreateWindow(cs);是用来注册等等。所以应该在调用这个CFrameWnd::PreCreateWnd()函数之前改写cs的值。但是把cs.cx=2000放在CFrameWnd::PreCreateWnd()之前和之后怎么都可以改?
注册之后改变cs的值不是徒劳无功的吗?应该在注册之前改变cs的值的不是吗? 展开
{
CFrameWnd::PreCreateWindow(cs);
cs.cx=2000;
return TRUE;
};
继承了CFrameWnd,改写PreCreateWindow()
CFrameWnd::PreCreateWindow(cs);是用来注册等等。所以应该在调用这个CFrameWnd::PreCreateWnd()函数之前改写cs的值。但是把cs.cx=2000放在CFrameWnd::PreCreateWnd()之前和之后怎么都可以改?
注册之后改变cs的值不是徒劳无功的吗?应该在注册之前改变cs的值的不是吗? 展开
2个回答
展开全部
赋值放在后面确实是可以修改成功的。这里面涉及两个逻辑:
1·要注意,这里是形参,地址传递的,也就是说,更改会对调用者生效。
2·创建窗口的逻辑,实际这个cs结构是传递给CXXXWnd::Create()函数的,也就是说,在你的实际类里面,CXXXWnd窗口,执行了PreCreate之后,由本窗口传递给了Create消息。这样你对cs的改变,即使CWnd基类没有得到,但在本窗口生效了。
当然,这个使用方式是不建议的,这不符合MFC的框架规则,虽然在这里没错,但在其它函数中使用,可能会出现问题。
1·要注意,这里是形参,地址传递的,也就是说,更改会对调用者生效。
2·创建窗口的逻辑,实际这个cs结构是传递给CXXXWnd::Create()函数的,也就是说,在你的实际类里面,CXXXWnd窗口,执行了PreCreate之后,由本窗口传递给了Create消息。这样你对cs的改变,即使CWnd基类没有得到,但在本窗口生效了。
当然,这个使用方式是不建议的,这不符合MFC的框架规则,虽然在这里没错,但在其它函数中使用,可能会出现问题。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询