hur.cn - 华软网

 热门搜索

同一个代码在OnInitialUpdate()函数中没问题,在OnSize()函数中出错

  作者:未知    来源:网络    更新时间:2011/8/11
C++">void CGxcwView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
GetClientRect(m_ClientRect);

if(m_WaveWnd1.Create(WS_BORDER |WS_CHILD|WS_VISIBLE,m_ClientRect,this,0)==false)
TRACE("Create CWaveWnd Faulse\n");

m_WaveWnd1.SetMaxPlotNum(800);


if(m_WaveWnd2.Create(WS_BORDER |WS_CHILD|WS_VISIBLE,m_ClientRect,this,0)==false)
TRACE("Create CWaveWnd2 Faulse\n");

m_WaveWnd1.SetWindowPos(&wndBottom ,m_ClientRect.left,m_ClientRect.top,
(m_ClientRect.right-m_ClientRect.left),(m_ClientRect.bottom-m_ClientRect.top)/2,SWP_DRAWFRAME );//这行在这个函数里运行没有问题
m_WaveWnd2.SetWindowPos(&wndBottom ,m_ClientRect.left,
m_ClientRect.top+(m_ClientRect.bottom-m_ClientRect.top)/2,(m_ClientRect.right-m_ClientRect.left),
(m_ClientRect.bottom-m_ClientRect.top)/2-15,SWP_DRAWFRAME );

m_WaveWnd2.SetMaxPlotNum(800);

}

C++">void CGxcwView::OnSize(UINT nType, int cx, int cy) 
{
CListView::OnSize(nType, cx, cy);

GetClientRect(m_ClientRect);
m_WaveWnd1.SetWindowPos(&wndBottom ,m_ClientRect.left,m_ClientRect.top,
(m_ClientRect.right-m_ClientRect.left),(m_ClientRect.bottom-m_ClientRect.top)/2,SWP_DRAWFRAME );//在这行出错
m_WaveWnd2.SetWindowPos(&wndBottom ,m_ClientRect.left,
m_ClientRect.top+(m_ClientRect.bottom-m_ClientRect.top)/2,(m_ClientRect.right-m_ClientRect.left),
(m_ClientRect.bottom-m_ClientRect.top)/2,SWP_DRAWFRAME );
// TODO: Add your message handler code here

}

两个函数如上,编译可以通过,但是运行弹出程序终止对话框,在OnInitialUpdate函数中是初始化一个CWnd对象到窗口中,然后想利用OnSize函数重绘,但通过设置断点,发现在上述位置出错终止。
---华软 网友回答---
OnSize的时候m_WaveWnd1还没创建
---华软网友回复---
引用 1 楼 jiangsheng 的回复:
OnSize的时候m_WaveWnd1还没创建



OnSize里判断一下窗口句柄,如果为NULL就不要操作了
---华软网友回复---
简单一点,定义一个BOOL标记,初始化为FALSE,在OnInitUpdate中最后return之前设置为TRUE。在OnSize()中判断一下该标记的值,然后再调用你的m_WaveWnd1.SetWindowPos(...);      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。