hur.cn - 华软网

 热门搜索

GetSafeHwnd的问题

  作者:未知    来源:网络    更新时间:2011/8/26
Dialog中放了个tab control控件



为了使这个控件随对话框一块放大缩小,于是重载OnSize 


       CDialog::OnSize(nType, cx, cy);

// TODO: 在此处添加消息处理程序代码

//处理tab ctronl控件的问题
if(m_tabctrl.GetSafeHwnd())   //如果没有这行代码立即报错, 
{
    CRect rc;
GetClientRect(rc);
m_tabctrl.MoveWindow(rc);
}

为什么会报错?

我知道OnSize函数在对话框运行的时候会调用一次,然后随着对话框放大缩小,它又会不断的被调用

肯定是第一次 被调用的时候出错了。 

  ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));  代码跳到这里。


第二个问题,我加了GetSafeHwnd后,成功运行,但是问题又来了,对话框放大所小,上面的控件是跟着放大缩小,但是会闪屏, 

这个该如何解决,最好有代码提供


---华软 网友回答---
1 m_tabctrl还没创建,hwnd为空。
2 这个是系统设置了dragfullwindow。可以用systemparameterinfo来修改spi_setdragfullwindow。

---华软网友回复---
2. 对话框勾上clip children属性
---华软网友回复---
Onsize的第一次调用发生在子窗口创建之前的~

---华软网友回复---
 我知道没有创建,我很奇怪,已经运行到OnSize了,怎么还没有创建啊?

主对话框上有tab ctrl, 然后还有两个对话框dlg1, dlg2, 

另外,当我将m_tabctrl关联起 对话框dlg1, dlg2的时候,就发现随着主对话框的放大缩小,dlg1, dlg2

不能放大缩小。。。。。。。。

这是何故啊, 我不关联的时候, tab ctrl可以随着主对话框放大缩小, 关联dlg1, dlg2的时候,就发现dlg1, dlg2好像是被固定死了一样

风格我已经设置为child ,Resizing

了啊 

救命啊





引用 1 楼 ndy_w 的回复:
1 m_tabctrl还没创建,hwnd为空。
2 这个是系统设置了dragfullwindow。可以用systemparameterinfo来修改spi_setdragfullwindow。

---华软网友回复---
楼上正解,控件还没有create之前就会触发wm_size
---华软网友回复---
大家好,继续问个问题, tab control控件随着对话框放大缩小, 会闪烁怎么办?



---华软网友回复---
 有个主对话框,主对话框上有个tab control, tab control 关联了dlg1,dlg2,....

tab control控件随着对话框是可以放大缩小的,但是问题出现在:dlg1, dlg2,居然是固定的,不会跟着主对话框一块放大缩小。

很奇怪!

代码如下:


 void CTargetStateDialog::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
    //对tab control控件及tab control控件相关联在对话框在WM_SIZE消息进行处理
if(m_tabCtrl.GetSafeHwnd())
{
CRect rc;
GetClientRect(&rc);
m_tabCtrl.MoveWindow(&rc);

if(dlg1->GetSafeHwnd())
{
        rc.bottom -= 20;
        rc.left += 1;
        rc.right -= 1;
        dlg1->MoveWindow(&rc );


}
}
}


dlg1我将它设为:Resizing 了,是child风格。。。


     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。