GetSafeHwnd()的调用正确时机

在绘图程序中,我把所有的绘图操作都封装进自己编写的类CPage中,其中一个绘图操作是用来改变光标的形状,因为改变光标形状的函数需要引用绘图区的窗口句柄,为此我在类CPage中声明了一个窗口句柄变量 HWND m_hwndView,通过类初始化函数Init(HWND hwndView)对它进行赋值,供类中其他函数调用。我想在程序启动的时候,就把窗口句柄保存起来,为此我产生了如下调用:

CTestView::CTestView()
{
	m_page.Init(this->GetSafeHwnd());	
	TRACE1("CTestView = %d\n",this->GetSafeHwnd());
}

 

但是随后,发现在用鼠标绘图的时候,整个窗口闪烁非常厉害,包括工具栏和菜单栏。随后跟踪调试发现,m_hwndView的值一直为0.

实际上,在CTestView类构造的时候,CTestView对应的窗口并没有创建完毕,所以this->GetSafeHwnd( )返回0,即无效的窗口句柄。CTestView对应的窗口创建过程在CTestView( )之后,在OnInitUpdate( )之前。因此正确的获取视图窗口句柄如下:

void CTestView::OnInitialUpdate()
{
	CView::OnInitialUpdate();
	m_page.Init(this->GetSafeHwnd());
	TRACE1("OnInitialUpdate = %d\n",this->GetSafeHwnd());
}


调试结果如下: 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值