为了账号安全,请及时绑定邮箱和手机立即绑定

请问关于CView某个函数里加入CDC* pDC=GetDC()后画图问题?

/ 猿问

请问关于CView某个函数里加入CDC* pDC=GetDC()后画图问题?

catspeake 2019-07-24 18:15:53

CView某个函数里加入CDC* pDC=GetDC()后画图,为什么界面大小一变图就消失了?


查看完整描述

3 回答

?
慕娘9325324

界面大小改变,会发送窗口区无效的命令,也就是WM_PAINT,然后会导致窗口进行重绘。然后系统响应这个消息的顺序通常是:先调用OnPaint(消息处理函数),然后在OnPaint里面调用OnDraw(不是消息相应函数)函数,所以如果你想让窗口改变以后你的图像还在,那么你应该讲绘图的命令写在OnDraw函数里面,或者说干脆直接重载一遍OnDraw函数,然后根据自己的意愿任意绘图。

查看完整回答
反对 回复 2019-07-29
?
一只萌萌小番薯

你如何添加的 ,是不是下面这样子,没问题啊
void CTestzhidaodlgDlg::OnPaint()
{
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();
}
static int i=0;
CDC *pDC=GetDC();
if(i==1)
pDC->Rectangle(0,0,100,100);
i++;
ReleaseDC(pDC);

}



查看完整回答
反对 回复 2019-07-29
?
胡说叔叔

在相应WM_PAINT消息时,如果想得到DC句柄,只能调用BeginPaint,而不能用GetDC
在按钮的OnButton1命令响应函数里写Invalidate(); 在OnPaint函数中的else模块中
{
//CDialog::OnPaint();
CPaintDC dc(this);
static int i=0;
if(i==1)
dc.Rectangle(0,0,100,100);
i++;
}



查看完整回答
反对 回复 2019-07-29

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信