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个问题
谢谢 展开
在窗口上加一个按钮,按钮的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个问题
谢谢 展开
展开全部
你如何添加的 ,是不是下面这样子,没问题啊
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);
}
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 里面是处理对话框一些初始化的代码,没有这些代码,后续工作无法进行。注意以后加代码都加在后面, 一般不是会提示你 请在这下面加代码
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
威孚半导体技术
2024-08-19 广告
2024-08-19 广告
威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层...
点击进入详情页
本回答由威孚半导体技术提供
展开全部
很好的问题,在这里你这CDC*c=::beginpaint(PAiNTSTRuCT结构体);
结束代替为::EndPaint(一样的结构体),也能实现该功能,问题是这里是,在响应wm_paint消息不用这些getdc()函数,可视在其他情况都可以,而是像上面那样,或者CPaint()
结束代替为::EndPaint(一样的结构体),也能实现该功能,问题是这里是,在响应wm_paint消息不用这些getdc()函数,可视在其他情况都可以,而是像上面那样,或者CPaint()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在相应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++;
}
在按钮的OnButton1命令响应函数里写Invalidate(); 在OnPaint函数中的else模块中
{
//CDialog::OnPaint();
CPaintDC dc(this);
static int i=0;
if(i==1)
dc.Rectangle(0,0,100,100);
i++;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
估计是画刷的原因,你选一种与背景色不同的画刷试试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把条件语句if(i==1)改成if(i%2==1)不就OK了,看了一下你们的评论,没一个回答到点子上,真是让我失望之极,这么简单的问题还搞这么复杂,有时候我真不知道你们是干什么吃的,脑子真是长屁股里了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询