社区
图形处理/算法 帖子详情 画图Onpaint()函数遇到的问题 dinona 2009-07-01 03:02:03 在OnPaint() 中加入代码画图,可以实现
但是程序一开启,似乎并不会去调用OnPaint()函数
导致我的图一开始没有被画出来
然后是当有其他窗体挡住了我整个应用程序[有其他应用程序完全挡住]
然后我再让我的应用程序最前端,发现图片没有了
被遮住一部分,可以显示出来,非常正常
那么前面的问题应该怎么解决呢,大家帮忙啦,谢谢
...全文
341 19 打赏 收藏 画图Onpaint()函数遇到的问题 在OnPaint() 中加入代码画图,可以实现 但是程序一开启,似乎并不会去调用OnPaint()函数 导致我的图一开始没有被画出来 然后是当有其他窗体挡住了我整个应用程序[有其他应用程序完全挡住] 然后我再让我的应用程序最前端,发现图片没有了 被遮住一部分,可以显示出来,非常正常 那么前面的问题应该怎么解决呢,大家帮忙啦,谢谢 复制链接
扫一扫 分享 转发到动态 举报 AI 作业
写回复 配置赞助广告取 消
确 定
用AI写文章 19 条回复 切换为时间正序 请发表友善的回复… 发表回复 打赏红包 需支付: 0.00 元 取 消 确 定 dinona 2009-07-01 打赏举报 回复 18楼正解,虽然并不知道原因,可是非常感谢
揭贴 寒冰雪 2009-07-01 打赏举报 回复 加句UpdateWindow();试下。。 wltg2001 2009-07-01 打赏举报 回复 建议还是检查一下_cdc是不是初始化好了 dinona 2009-07-01 打赏举报 回复 CStatic pitShow;//picture控件
CDC *_cdc;
_cdc = pitShow.GetDC(); dinona 2009-07-01 打赏举报 回复 忘记说明了,我是在picture控件上面画图的
_cdc就是picture控件的CDC,
初始化什么是没有问题的
如果有问题就不会有时候可以画出来有时候不可以画出来了哦 快乐鹦鹉 2009-07-01 打赏举报 回复 _cdc是成员变量?什么时候初始化的? Ryanwen 2009-07-01 打赏举报 回复 _cdc是怎么定义的? 在OnPaint中为什么不用CPaintDC dc(this);
CDialog::OnPaint(); //把这句注释掉 dinona 2009-07-01 打赏举报 回复 试过,不行哦 快乐鹦鹉 2009-07-01 打赏举报 回复 写在else处,CDialog::OnPaint()之后 dinona 2009-07-01 打赏举报 回复 void CShowLineDlg::OnPaint()
{
CPen penX,penY,penZ,penT,*oldpen;
penX.CreatePen(PS_SOLID,1,RGB(255,0,0));
penY.CreatePen(PS_SOLID,1,RGB(0,255,0));
penZ.CreatePen(PS_SOLID,1,RGB(0,0,255));
penT.CreatePen(PS_SOLID,1,RGB(0,0,0));
double x1,x2;
int i;
int X=0;
double OriginX,OriginY,OriginZ;//原点坐标
double OffsetX=50,OffsetY=100;//横,纵坐标偏移量
OriginX=_points[0]._x;
OriginY=_points[0]._y;
OriginZ=_points[0]._z;
//画出时间横轴
oldpen = _cdc->SelectObject(&penT);
_cdc->MoveTo(0,OffsetY);
_cdc->LineTo(800,OffsetY);
_cdc->SelectObject(oldpen);
//画出X坐标偏移
oldpen = _cdc->SelectObject(&penX);
for(i=0;i<_counter;i++)
{
x1=(OriginX-_points[i]._x)+OffsetY;
x2=(OriginX-_points[i+1]._x)+OffsetY;
_cdc->MoveTo(X,x1);
X+=OffsetX;
_cdc->LineTo(X,x2);
}
_cdc->SelectObject(oldpen);
//画出Y坐标偏移
oldpen = _cdc->SelectObject(&penY);
X=0;
for(i=0;i<_counter;i++)
{
x1=(OriginY-_points[i]._y)+OffsetY;
x2=(OriginY-_points[i+1]._y)+OffsetY;
_cdc->MoveTo(X,x1);
X+=OffsetX;
_cdc->LineTo(X,x2);
}
_cdc->SelectObject(oldpen);
//画出Z坐标偏移
oldpen = _cdc->SelectObject(&penZ);
X=0;
for(i=0;i<_counter;i++)
{
x1=(OriginZ-_points[i]._z)+OffsetY;
x2=(OriginZ-_points[i+1]._z)+OffsetY;
_cdc->MoveTo(X,x1);
X+=OffsetX;
_cdc->LineTo(X,x2);
}
_cdc->SelectObject(oldpen);
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
} wltg2001 2009-07-01 打赏举报 回复 对话框的OnPaint中有个if语句的,你的代码加在什么地方啊? Ghost90 2009-07-01 打赏举报 回复 放在 OnDraw()里呢??? 快乐鹦鹉 2009-07-01 打赏举报 回复 [Quote=引用 4 楼 dinona 的回复:]
OnPaint函数的入口就是画我想要的图片
如果调用了没理由没有显示
如果我在Dlg::OnInitDialog()
中加入PostMessage(WM_PAINT,0,0);//触发OnPaint()函数
一开启程序就可以显示
[/Quote]
你说的很对啊。OnPaint应该自动调用的啊。理论大家都是明白的。你不愿意贴代码,就没有办法了。 dinona 2009-07-01 打赏举报 回复 强制是很简单,问题是我什么时候来强制它重绘
我的程序又不会自动响应它刚才被其他窗体覆盖了
然后自动去调用你说的Invalidate mynamelj 2009-07-01 打赏举报 回复 InvalidRect强制客户区重绘 dinona 2009-07-01 打赏举报 回复 OnPaint函数的入口就是画我想要的图片
如果调用了没理由没有显示
如果我在Dlg::OnInitDialog()
中加入PostMessage(WM_PAINT,0,0);//触发OnPaint()函数
一开启程序就可以显示 dinona 2009-07-01 打赏举报 回复 对话框 快乐鹦鹉 2009-07-01 打赏举报 回复 加断点确定OnPaint没有被调用? 快乐鹦鹉 2009-07-01 打赏举报 回复 你是何种工程?SDI还是对话框?OnPaint应该被调用啊 MFC onPaint 实例 画图DIY 用 VC 6.0 写的一个小软件,很多功能还没有怎么添加
实现通过命令移动光标,在画板上面画线 MFC版本五子棋(画图函数版) MFC做的五子棋。完全利用画图函数做的,但这个不象前面那个带背景音乐。
献丑献丑~~ Visual C++经典画图程序 Visual C++经典画图程序Visual C++经典画图程序 MFC画图软件 GDI学习中练习所有代码,可画图,修改画笔等 MFC写的画图程序 简单写了一个画图的程序
图形处理/算法
19,473
社区成员
50,678
社区内容
发帖 与我相关 我的任务 图形处理/算法 VC/MFC 图形处理/算法 复制链接
扫一扫 分享 确定 社区描述 VC/MFC 图形处理/算法 社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告 试试用AI创作助手写篇文章吧
+ 用AI写文章