社区
C++ 语言
帖子详情
OnDraw(CDC* PDC)问题
cofemate
2009-12-04 09:44:49
问下高手OnDraw(CDC* PDC)在被调时很多书上都说(CDC* PDC)这个参数已经传进来了,小弟我没明白这个参数是怎么传进来的? 看MFC中还有很多这样的函数,他们后面跟的参数都是直接可以拿到函数体中使用的(特别是一些类的对象的指针这样的参数)。 为什么OnDraw(CDC* PDC)这个函数 不先定义一个CDC类的对象 dc ,然后OnDraw(&dc)??
...全文
365
10
打赏
收藏
OnDraw(CDC* PDC)问题
问下高手OnDraw(CDC* PDC)在被调时很多书上都说(CDC* PDC)这个参数已经传进来了,小弟我没明白这个参数是怎么传进来的? 看MFC中还有很多这样的函数,他们后面跟的参数都是直接可以拿到函数体中使用的(特别是一些类的对象的指针这样的参数)。 为什么OnDraw(CDC* PDC)这个函数 不先定义一个CDC类的对象 dc ,然后OnDraw(&dc)??
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cofemate
2009-12-04
打赏
举报
回复
结贴了 :)
cofemate
2009-12-04
打赏
举报
回复
找到了 谢谢楼上的朋友
xylicon
2009-12-04
打赏
举报
回复
[Quote=引用 7 楼 cofemate 的回复:]
void CView::OnPaint()
{
// standard paint routine
CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);
}
在哪里可以找到啊?小弟愚笨,望指点
[/Quote]
\Microsoft Visual Studio\VC98\MFC\SRC\ViewCore.cpp
cofemate
2009-12-04
打赏
举报
回复
void CView::OnPaint()
{
// standard paint routine
CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);
}
在哪里可以找到啊?小弟愚笨,望指点
xylicon
2009-12-04
打赏
举报
回复
OnDraw 是由OnPaint调用的。
void CView::OnPaint()
{
// standard paint routine
CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);
}
OnDraw是虚函数,所以就能够在你的派生类中执行OnDraw了。
bamboo1999
2009-12-04
打赏
举报
回复
是mfc构造(或者说取到的)的。
调用者负责传入合法的参数。
cattycat
2009-12-04
打赏
举报
回复
up loaden,我也不知道回调函数在哪,这个可能得看mfc的消息机制吧, DECLARE_MASSAGE_MAP下面声明的函数On_Draw()原型,顺着这个往上找吧。
cofemate
2009-12-04
打赏
举报
回复
回调函数里已经构造了一个CDC对象。老邓能说具体点么?回调函数代码在什么地方我去看下
「已注销」
2009-12-04
打赏
举报
回复
为什么OnDraw(CDC* PDC)这个函数 不先定义一个CDC类的对象 dc ,然后OnDraw(&dc)??
==============
在消息派发的时候,回调函数里已经构造了一个CDC对象。
因为消息要发送到不同的类,而且是多次,所以传递进去一个指针。
这样就不用重复构造对象,提高效率(而且你也构造不成,因为只能在回调函数里构造,里面有构造CDC的信息)。
「已注销」
2009-12-04
打赏
举报
回复
因为传递进去的是一个指针。
MFC俄罗斯方块包括方块类
const int BLOCK_LINE = 20;//当前地图的行数 const int BLOCK_ROW = 10;//当前地图的列数 class CBlock { public: CBlock(void); ~CBlock(void); private: // 当前方块形状 int m_BlockShape; //下一个方块形状 int m_nextBlockShape; //当前方块状态 int m_BlockState; //等级 int m_BlockLevel; //当前可消行数 int m_BlockCurDelLine; //游戏是否在执行 bool m_blockRunning; //当前方块位置 POINT m_BlockPos[4]; //下个方块位置 POINT m_nextBlockPos[4]; //当前的屏幕状态 //BLOCK_LINE是行数,BLOCK_ROW是列数 int m_Blockmap[BLOCK_LINE][BLOCK_ROW]; public: // 初始化游戏 void BlockInit( void ); private: // 记录方块图形 CBitmap m_bmpBlock[7]; public: //创建一个新的方块出来,这里只给方块形状赋值 void CreateNewBlock(void); private: //这里给方块位置赋值, //shape是形状, pt[]是用来接收方块坐标的(方块形状的排列坐标)数组 //xPos是偏移量,就是方块显示位置和方块显示的框的最左边的差 void MakeNewBlock(int shape, POINT pt[], int xPos); public: //将方块画在对应的DC上 void DrawBlock(
CDC
*
pDC
); //方块的下落过程,主要部分 void BlockDropDown(
CDC
*
pDC
); private: // 隐藏方块 void HideBlock(
CDC
*
pDC
); // 背景图片变量 CBitmap m_bmpBKGND; public: // 画下个方块的框框 void DrawNextBlock(
CDC
*
pDC
); //方块左移 void BlockLeft(
CDC
*
pDC
); //方块右移 void BlockRight(
CDC
*
pDC
); //方块下移 void BlockFastDown(
CDC
*
pDC
); //方块变形 void ChangeState(
CDC
*
pDC
); // 消除一行 //
pDC
是传入的DC //LineNum是消除的行从第几行开始(我这里是最上面为0,最下面为19) //start是 游戏是否是要把消除行以上的都置0,我是用在
OnDraw
()里,用来重画屏幕的, void DeleteLine(
CDC
*
pDC
, int LineNum, bool start); // 游戏是否结束,true=结束了 bool BlockGameOver(void); // 计分板 //del是决定是否是已消一行的 void BlockScore(int del,
CDC
*
pDC
); //返回是否升级了,true=升级了 bool BlockLevelUp(void); //返回下落速度 int BlockSpeed(void); };
VC++ 画线
cdc
用VC的
CDC
画随机数 源码#pragma once #endif // _MSC_VER > 1000 const int N=10000; class CRandDrawView : public CView { protected: // create from serialization only CRandDrawView(); DECLARE_DYNCREATE(CRandDrawView) // Attributes public: CRandDrawDoc* GetDocument(); // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CRandDrawView) public: virtual void
OnDraw
(
CDC
*
pDC
); // overridden to draw this view virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); virtual void OnBeginPrinting(
CDC
*
pDC
, CPrintInfo* pInfo); virtual void OnEndPrinting(
CDC
*
pDC
, CPrintInfo* pInfo); //}}AFX_VIRTUAL // Implementation public: int m_zeroarryN[N]; int Y; int y; int x; int Bubblesort(int data[]); int SelectSort(int x[]); int QuickSort(int ww[], int left, int right); int m_zeroarry[N]; // int m_zeroarry [N]; virtual ~CRandDrawView(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif
双缓冲绘图实现图片查看格式转换器
基于MFC单文档的图片查看格式转换器 功能描述: 1、支持BMP,JPG,GIF,PNG等多种格式相互转换(打开->另存为) 2、打开图片后鼠标滚轮可以放大缩小 3、支持鼠标左键拖动图片位置 4、尺寸超过客户区时可使用滚动条 特点:使用双缓冲绘图,实现缩放移动时界面内容不闪烁 实现过程: 1、创建MFC单文档程序 2、添加CMemDC.h文件(双缓冲绘图封装) 3、改造
OnDraw
(
CDC
*
pDC
)函数 4、在CPicZoomView类添加鼠标各类消息跟事件消息响应 PS:双缓冲绘图为两步:一是创建内存DC,二是重写OnEraseBkgnd(
CDC
*
pDC
)函数。
基于MFC的开发项目中出现的闪屏
问题
的解决方案
为了美化窗口界面,通过在View类里重载
OnDraw
()函数来修改背景图片。但是进入主窗口后,拖动或最小最大化窗口时,会出现闪屏。
CDC
.rar_MFC_MFC文本输出
在Windows平台上,应用程序的图形设备接口(graphics device interface,GDI)被抽象为设备上下文(Device Context,DC)。 在微软基类库MFC中,
CDC
类是定义设备上下文对象的基类,所有绘图函数都在
CDC
基类中定义。当需要输出文字或图形时,就需要调用
CDC
类的成员函数,这些成员函数具备输出文本、绘制图形的功能。 本节讲解的例程全部在TestView.cpp文件的 void CTestView::
OnDraw
(
CDC
*
pDC
)函数中实现。
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章