小弟最近在做一个程序时,发现CDC类很不好使,还请大家指教:
首先新建了一个单文档窗口,然后新建了一个block类,现在需要用block类来画图,
所以我在view.cpp里建了一个block类的对象,然后向这个对象传递了当前的窗口指针hwnd,然后在block中使用hwnd->GetDC();程序能通过编译,但是不能运行
然后,我试着在block类里加入一个public变量: CDC* dc;然后在view类里给这个变量赋值,程序能通过编译,但还不能运行
这是怎么回事啊>
首先新建了一个单文档窗口,然后新建了一个block类,现在需要用block类来画图,
所以我在view.cpp里建了一个block类的对象,然后向这个对象传递了当前的窗口指针hwnd,然后在block中使用hwnd->GetDC();程序能通过编译,但是不能运行
然后,我试着在block类里加入一个public变量: CDC* dc;然后在view类里给这个变量赋值,程序能通过编译,但还不能运行
这是怎么回事啊>
解决方案 »
- 开机启动的话,不用注册表,如何实现?
- getcomputername getmodulename 无法获得相关内容
- SetWindowExtEx 和SetViewportExtEx 的问题
- int libnet_init_packet(u_short packet_size, u_char **buf)分配的内存地址为0x000是什么原因造成的。
- 添加消息响应
- 如何获取电脑USB是否开启?
- 在编辑框中显示文件信息
- 简单的多线程问题,进来拿分了!
- 这里人多,问个题外话,网络连一会就断,奇怪
- 获得了窗口得句柄,这样得到窗口得所处得坐标
- UNICODE, ANSI ,UTF-8 UTF-16 GB2312 BIG5 ...请高手解释
- CEdit控件,怎么做才能让它的内容不能被复制出去?
dc=new CDC;
dc=GetDC();其它的就不用讲了吧?
不行啊,我刚刚试过了。
BOOL CGdiObject::Attach(HGDIOBJ hObject)
{
ASSERT(m_hObject == NULL); // only attach once, detach on destroy
.......
}
调试时有一个箭头指向ASSERT那行
//dc=new CDC;//不需要吧。
dc=GetDC();
{
CRect rect;
if(!style)
hBrush.CreateSolidBrush(RGB(255,255,255));
int x,y;
for(int i=0;i<4;i++)
{
x=pos.point[i].x;
y=pos.point[i].y;
rect=CRect(OTHER+x*H+1,ADD+x*H+1,OTHER+H*(x+1),ADD+(x+1)*H);
dc->FillRect(rect,&hBrush);
}
}
以前我也是这样用的啊,并没有什么问题
不知道为什么现在就不行了
dc=new CDC;//不需要吧。
//这个还是要上为好,要不对一个空指针赋值,多不好呀
dc=GetDC();
dc=new CDC;//绝对不需要,加上内存必然泄漏,
dc=GetDC();//并非对空指针赋值,而是给指针赋值。错误的做法是这样子的int *p;*p=2;
我多次用了brush.CreatesolidBrush(),问题就
出在这
唉,MFC用起来感觉也不太爽,它封装得太多了
很多底层的东西都看不到