重绘消息是在主框架窗口OnCreate函数之后发送吗

我自定义了消息并在响应函数里做了个一个进度栏在状态栏上在CMainFrame的OnCreate里PostMessage该消息,问题是当窗口发生重绘时进度栏和状态栏的位置就... 我自定义了消息 并在响应函数里做了个一个进度栏在状态栏上
在CMainFrame的OnCreate里PostMessage该消息,问题是当窗口发生重绘时
进度栏和状态栏的位置就会错开 ,于是我做了一个OnPaint响应函数,里面的代码如下:

CRect m_PRect;
m_wndStatusBar.GetItemRect(1,&m_PRect); //1是状态栏里的一个窗格的索引
if(!m_wndStatusBar.m_hWnd)
m_progressctrl.Create(WS_CHILD | WS_VISIBLE ,m_PRect,&m_wndStatusBar,123);
else
m_progressctrl.MoveWindow(m_PRect);

m_progressctrl.SetPos(50);
问题是运行出现错误 是什么问题 请高人指教一下~
一楼我也考虑过 于是我做了一个判断if(!m_progressctrl.m_hWnd) 进度栏是否创建,但问题还是纯在啊

谢谢 我知道错哪了
展开
 我来答
老牛带你看奇闻
2009-09-24 · TA获得超过863个赞
知道小有建树答主
回答量:500
采纳率:0%
帮助的人:777万
展开全部
HI上聊

因为OnPaint函数是会执行多次的,所以你在这里调用
m_progressctrl.Create(WS_CHILD | WS_VISIBLE ,m_PRect,&m_wndStatusBar,123);

那么它就会被create多次,肯定会出错了

if(!m_wndStatusBar.m_hWnd)
你这样判断是不对的,你要判断m_progressctrl有没有创建,没有就create,如果已经创建了就movewindow
Tian·Ccb12
2009-09-24 · TA获得超过389个赞
知道小有建树答主
回答量:535
采纳率:0%
帮助的人:580万
展开全部
定义一个用户消息UM_PROGRESS
在OnCreate中加入SendMessage(UM_PROGRESS);(要在状态栏创建之后)
在OnPaint中也加入SendMessage(UM_PROGRESS);

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_MESSAGE(UM_PROGRESS,&CMainFrame::OnProgress)
END_MESSAGE_MAP()

LRESULT CMainFrame::OnProgress(WPARAM wParam,LPARAM lParam)
{
CRect rect;
m_wndStatusBar.GetItemRect(m_wndStatusBar.CommandToIndex(IDS_PROGRESS),&rect);
if(!m_progress.m_hWnd)
{
m_progress.Create(WS_CHILD|WS_VISIBLE|PBS_SMOOTH,rect,&m_wndStatusBar, ID_PROGRESS);
}
m_progress.MoveWindow(&rect);

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式