关于MFC类成员变量的声明问题

比如有下面一个类:这是头文件c1.h(include都省略):classc1{……public:CDCmemDC;CMainFrame*m_pfr;voidccc();…... 比如有下面一个类:
这是头文件c1.h(include都省略):
class c1
{
……
public:
CDC memDC;
CMainFrame *m_pfr;
void ccc();
……
};
这是cpp文件
#include "c1.h"
……
void c1::ccc()
{
……
memDC.TextOut(0,0,"here");
m_pfr->……;
……
}
问题就在memDC上面,一般定义过的类,在输完memDC.之后,会有一个成员函数和变量的列表出现,供用户选择,但是这里没有。而且对memDC的绘图语句执行之后屏幕上也没有显示。但是同一个类里面定义的m_pfr->输完之后就弹出来一个列表。我还试过CString类,和CDC一样,没有显示,但是CString的Format函数是起作用的,这个我试过。另外,在同一工程的另一个类c2里面,代码和这个差不多,里面的memDC有列表显示,功能正常。我在测试时发现,c2在初始化时只调用了一遍OnDraw函数,可是c1调用了两遍,因为两个类功能类似,所以在创建和使用时两个类是一样的,可是出了这么多问题,我实在搞不清楚了。
我想弄明白的问题是:
1. 为什么有的变量声明后有列表弹出来,有的没有。
2. 没有列表会不会影响CDC类的绘图功能。
3. 怎么修改才能使类成员变量正常(就是使用的时候列表弹出来)。
4. 什么情况会调用OnDraw函数(我知道的有OnPaint和Invalidate)。
暂时先想到这几个问题,以后想到再补充,希望前辈们多多指教。谢谢!
VC真是诡异啊,我就在里面加一些AfxMessageBox的测试语句,现在把这些语句去掉,c1变正常了,c2又不正常了!
求高手~~
唉,我还是再看看程序吧,改了一天了。
调用两次的问题我已经搞明白了,是在点AfxMessageBox的确定的时候造成了窗口的重绘,如果小心点的就不会重绘了。
另外,只要声明写对了,智能提示有没有都一样的。DC绘图的问题我也解决了,是初始化载入位图时,位图的高和宽定义的不对。
大家都回答的很认真,我在这里谢谢了,但是最佳答案只能选一个,我只能对另外4位说声对不起了。3楼的回答也很不错的。
展开
 我来答
gqm117
2010-08-17 · 超过22用户采纳过TA的回答
知道答主
回答量:240
采纳率:0%
帮助的人:103万
展开全部
补充一下三楼的
1:有的人装的vc本身就有问题,你可以试试点组建里的“全部重建”然后再试试 ,还可以这样:先保存,关掉,然后找到程序所在文件夹,把里面的".ncp"".opt""等其他计算机不能识别的文件删掉再重新打开
2:如果是定义出现了问题的话肯定会影响其绘图功能的,如果是我上面说的vc的问题的话虽然不弹出来也不会影响的
3:不好说,你vc还没学好上面的用法很混乱
4:OnDraw函数是程序一运行时就调用的 正常情况下只调用一次(如果你们有加其他程序的话),如果你运行完 改变程序窗口的大小或者移动窗口的话 onDraw还会被调用的
另外:我也是新手 计算机专业 欢迎加好友一起学习
建议下载360软甲管家里开发必备里的这个插件用 ,学习mfc会很方便的:Visual Assist X 10.0
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
望穿秋水待伊人
2010-08-16 · TA获得超过644个赞
知道小有建树答主
回答量:708
采纳率:100%
帮助的人:800万
展开全部
声明CDC的变量后,要初始化,初始化后才能使用,不然肯定 没用的
指针也要初始化才能使用,正常情况下,如果代码正确一些提示是肯定 会弹出来的,不过也有例外 的情况,有个文件会影响这个提示,所以不能根据这个判断代码 的正误,只要你的代码确实 正常,这个提示弹不弹出来都没关系。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
哈哈哈哈nSYs
2010-08-16 · 超过20用户采纳过TA的回答
知道答主
回答量:91
采纳率:0%
帮助的人:76.1万
展开全部
memDC,看变量名应该属于缓存,也就是textout没有直接画屏幕上,通过m_pfr->blt(...)把缓存memDC的内容画出来,这样做好处是不会闪烁;ondraw 跟opaint类似,属于刷新时重绘
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
andy_reb
2010-08-16 · TA获得超过232个赞
知道小有建树答主
回答量:143
采纳率:0%
帮助的人:60.8万
展开全部
CDC,只是申明了,没有创建,所以不能使用,你必须与系统的CDC关联起来。
或者获得设备的
OnDraw,在你每次刷新或者重绘窗口时,会调用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lyj19871108
2010-08-16 · TA获得超过173个赞
知道小有建树答主
回答量:211
采纳率:0%
帮助的人:137万
展开全部
没有智能提示可能的原因有:
1、定义出现了问题
2、调用方式不正确(比如,没有正确的区分.和->或者是非静态的当成在静态函数使用当然是错误的,肯定不会显示出来)
3、动态的智能提示,更新数据库需要一定的时间,特别是逻辑或定义方式非常复杂的时候。
4、也有可能更新只能提示数据库堵塞造成的,有时重启studio会解决该问题。
5、必要时添加this标识用以区分同名不同域的变量。
智能提示有没有对编译连接程序是没有任何影响的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式