MFC-4简单的窗口重绘(非部分重绘)

#include <afxwin.h>
#include "resource.h"
#include <afxtempl.h>   //定义模板类的头文件

class MyDocument : public CDocument
{
public:
	CArray<CPoint,CPoint &> pArray;//<保存的数据类型,读取保存数据类型的返回值>
	void AddPoint(CPoint p)
	{
		pArray.Add(p);
	}
	CPoint GetPoint(int i)
	{
		return pArray[i];
	}
	int GetSize()
	{
		return pArray.GetSize();
	}
	DECLARE_DYNCREATE(MyDocument)//声明run-time类
	DECLARE_MESSAGE_MAP()
};

IMPLEMENT_DYNCREATE(MyDocument,CDocument)//声明MyDocument为run-time类
BEGIN_MESSAGE_MAP(MyDocument,CDocument)
END_MESSAGE_MAP();

class MyView : public CView
{
public:
	void OnDraw(CDC * aDC)//必须重载的虚函数,重绘函数
	{
		MyDocument *doc = (MyDocument *)GetDocument();//取得当前Document的指针
		int num = doc->GetSize();
		int i;
		for(i=0;i<num;++i)
		{
			CPoint point = doc->GetPoint(i);
			aDC->SetPixel(point,RGB(255,0,0));
		}
	}

	afx_msg void OnLButtonDown(UINT,CPoint point)
	{
		SetCapture();//取得鼠标消息的接收权
	}

	afx_msg void OnMouseMove(UINT,CPoint point)
	{
		if(this == GetCapture())
		{
			CClientDC aDC(this);//建立画布
			aDC.SetPixel(point,RGB(255,0,0));
			MyDocument *doc = (MyDocument *)GetDocument();
			doc->AddPoint(point);
		}
	}

	afx_msg void OnLButtonUp(UINT,CPoint point)
	{
		::ReleaseCapture();
	}

	DECLARE_MESSAGE_MAP()
	DECLARE_DYNCREATE(MyView)//声明为run-time类
};

BEGIN_MESSAGE_MAP(MyView,CView)
	ON_WM_LBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONUP()
END_MESSAGE_MAP()

IMPLEMENT_DYNCREATE(MyView,CView)//声明MyView为run-time类

class MyFrame:public CFrameWnd
{
	DECLARE_DYNCREATE(MyFrame)//声明run-time类
	DECLARE_MESSAGE_MAP()
};

BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
END_MESSAGE_MAP()

IMPLEMENT_DYNCREATE(MyFrame,CFrameWnd)//声明MyFrame为run-time类

class MyApp:public CWinApp
{
public:
	BOOL InitInstance()
	{
		CDocument *doc;//指向文件的指针
		CSingleDocTemplate * DocTemplate;//文件指向单文档模板对象的指针
		DocTemplate = new CSingleDocTemplate(
			IDR_MENU1,//用于单文档框架之资源标志符
			RUNTIME_CLASS(MyDocument),//单文档窗口的Document类
			RUNTIME_CLASS(MyFrame),//单文档窗口的窗口框架类
			RUNTIME_CLASS(MyView)//单文档窗口的View类
			);//建立单文档模板对象

		AddDocTemplate(DocTemplate);//将单文档模板对象设置给MyApp;

		doc = DocTemplate->CreateNewDocument();//建立一个新的文档

		m_pMainWnd = DocTemplate->CreateNewFrame(doc,NULL);//建立一个窗口框架

		DocTemplate->InitialUpdateFrame((CFrameWnd*)m_pMainWnd,doc);//初始化窗口框架并连接view

		m_pMainWnd->ShowWindow(SW_SHOW);//显示窗口
		return true;
	}
} a_app;//建立应用程序对象
时间: 2024-09-28 22:20:48

MFC-4简单的窗口重绘(非部分重绘)的相关文章

MFC应用程序中处理消息的顺序,创建窗口的过程关闭窗口的顺序(非模态窗口),打开模式对话框的函数调用顺序

MFC应用程序中处理消息的顺序 1.AfxWndProc()      该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc 2.AfxCallWndProc() 该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,                    然后调用WindowProc()函数 3.WindowProc()      该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数 4.O

MFC单文档如何用.BMP位图重绘非客户区

问题描述 MFC单文档如何用.BMP位图重绘非客户区 20C 功能:新建一个MFC单文档程序,微软原生的边框背景不好看.想用一张.bmp位图重绘非客户区. 困难:我在OnNcPaint()加载.bmp位图后,全部都遮盖住了,然后鼠标点击屏幕任一处,边框就还原为微软默认的了.何解? 请各位前辈多多指点,赠送20个C币,表示衷心的感谢! 解决方案 参考:http://blog.csdn.net/shuilan0066/article/details/6635458http://blog.csdn.n

模态对话框-MFC关于获取子窗口CWnd

问题描述 MFC关于获取子窗口CWnd 1.需要实现的功能,点击Button然后弹出一个自定义的WaveArea对话框,然后获取WaveArea->Group的CWnd指针. 2.但是我通过和WaveArea对话框绑定的CMYDialog中的OnSize()函数去获取这个CWnd,得到的总是NULL. 3.测试过,不管是创建模态对话框还是非模态对话框,都无法在自己定义的类中获取CWnd 指针. 求大神指导!! 解决方案 你在CTestGroupDlg中定义一个WaveArea对话框类的成员变量或

c++-菜鸟提问:用mfc编写简单计算器

问题描述 菜鸟提问:用mfc编写简单计算器 要求:用switch语句,实现加减乘除和小数点,temp表结果,former第一个数,later第二个数,其他常量不限-- 解决方案 MFC简单计算器基于MFC的简单计算器MFC简单计算器 解决方案二: http://zhangzhenzhen2009.blog.163.com/blog/static/18703924720115851146127/ 解决方案三: 操作步骤: 1.启动Visual C++,新建一个Visual C++项目,选用MFC应

mfc activex控件-MFC中 ACTIVEX控件活动与非活动区别!!!

问题描述 MFC中 ACTIVEX控件活动与非活动区别!!! 请问下 ACTIVEX控件 活动与非活动状态区别?也就是说有窗口和无窗口的区别?谢谢 能详细介绍下不胜感激!!(比如他们用途区别,例子说明更好)

中国网购发展的下一步:非标重品类将成主要驱动力

普哥昨天受邀参加了京东举办的家电行业峰会,对京东提出的到2016年家电网络销售1100亿的目标很震撼.在普哥的思维逻辑里,作为消费者,网购图书.服装这很容易接受,网购家电则需要下更大的决心:从行业的角度来看,图书.服装等品类的线上市场已趋于成熟,像家电这样的重品类已经越来越成为中国网购进一步发展的最重要驱动力. 中国网购行业真正进入规模化快速增长阶段是在2008年后,这一年网购交易额首次突破1000亿,并有高达138.4%的增长率.到2012年时,中国网购市场交易规模突破万亿,达到1.3万亿,占

WindowsApi学习笔记-创建一个简单的窗口

#include <windows.h> LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数的函数原型 int APIENTRY WinMain( //APIENTRY是__stdcall的宏定义 HINSTANCE hInstance, //本模块的实例句柄 HINSTANCE hPrevInstance, //Win16留下的废物 LPSTR lpCmdLine, //命令行参数 int nCmdShow //主窗口初始

汇编教程之创建简单的窗口

在本课中我们将写一个 Windows 程序,它会在桌面显示一个标准的窗口. 理论: Windows 程序中,在写图形用户界面时需要调用大量的标准 Windows Gui 函数.其实这对用户和程序员来说都有好处,对于用户,面对的是同一套标准的窗口,对这些窗口的操作都是一样的,所以使用不同的应用程序时无须重新学习操作.对程序员来说,这些 Gui 源代码都是经过了微软的严格测试,随时拿来就可以用的.当然至于具体地写程序对于程序员来说还是有难度的.为了创建基于窗口的应用程序,必须严格遵守规范.作到这一点

汇编创建简单的窗口

理论: Windows 程序中,在写图形用户界面时需要调用大量的标准 Windows Gui 函数.其实这对用户和程序员来说都有好处,对于用户,面对的是同一套标准的窗口,对这些窗口的操作都是一样的,所以使用不同的应用程序时无须重新学习操作.对程序员来说,这些 Gui 源代码都是经过了微软的严格测试,随时拿来就可以用的.当然至于具体地写程序对于程序员来说还是有难度的.为了创建基于窗口的应用程序,必须严格遵守规范.作到这一点并不难,只要用模块化或面向对象的编程方法即可. 下面我就列出在桌面显示一个窗

mfc c++-MFC中不同的窗口之间传值的问题

问题描述 MFC中不同的窗口之间传值的问题 在MFC单文档程序中,新建一个对话框,对话框中一个有几个单选按钮.给单选按钮定义一个变量m_PenStyle用来确定选择了哪个单选按钮.然后在View类里面定义一个变量PenStyle,我想让m_PenStyle的值传递给PenStyle,但是运行时发现传递不过来,怎么才能传递到View类里面? 解决方案 每个单选按钮不是有个ID么?用ID就行了,还要什么其他标识来追踪.