CDC *pDC=GetDC()画图的一些问题

用VC6建立一个基于对话框的MFC程序在窗口上加一个按钮,按钮的OnButton1命令响应函数里写Invalidate();UpdateWindow();即单击按钮刷新窗... 用VC6建立一个基于对话框的MFC程序
在窗口上加一个按钮,按钮的OnButton1命令响应函数里写Invalidate();UpdateWindow();
即单击按钮刷新窗口
在OnPaint函数里写入以下代码:
static int i=0;
CDC *pDC=GetDC();
if(i==1)
pDC->Rectangle(0,0,100,100);
i++;
ReleaseDC(pDC);
整个程序功能应该是当程序运行后只有第一次单击按钮时才会画矩形
但是程序没有实现上述功能,这是为什么?
假如我在CDC *pDC=GetDC()下加上一句CPaintDC dc(this)后
程序又能实现只有第一次单击按钮才画矩形的情况,这又是为什么?
我实在找不出原因
请高手回答以上2个问题
谢谢
展开
 我来答
孤松独海
推荐于2016-12-02 · TA获得超过1513个赞
知道大有可为答主
回答量:1220
采纳率:0%
帮助的人:489万
展开全部
你如何添加的 ,是不是下面这样子,没问题啊
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);

}
追问
我是加在最开头的,也试过加在else里面都不行
但是你的却可以
这又是为什么
追答
必须放在if else 后门,因为在if 和else 里面是处理对话框一些初始化的代码,没有这些代码,后续工作无法进行。注意以后加代码都加在后面, 一般不是会提示你 请在这下面加代码
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
437384801
2011-04-23 · TA获得超过1867个赞
知道小有建树答主
回答量:1299
采纳率:0%
帮助的人:511万
展开全部
很好的问题,在这里你这CDC*c=::beginpaint(PAiNTSTRuCT结构体);
结束代替为::EndPaint(一样的结构体),也能实现该功能,问题是这里是,在响应wm_paint消息不用这些getdc()函数,可视在其他情况都可以,而是像上面那样,或者CPaint()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
漫步轮回岁月
2011-04-23 · 超过19用户采纳过TA的回答
知道答主
回答量:63
采纳率:0%
帮助的人:36.2万
展开全部
在相应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++;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sun_siliang
2011-04-23 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4613万
展开全部
估计是画刷的原因,你选一种与背景色不同的画刷试试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大熊猫爱数学
2018-12-02
知道答主
回答量:1
采纳率:0%
帮助的人:799
展开全部
把条件语句if(i==1)改成if(i%2==1)不就OK了,看了一下你们的评论,没一个回答到点子上,真是让我失望之极,这么简单的问题还搞这么复杂,有时候我真不知道你们是干什么吃的,脑子真是长屁股里了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式