怎么在MFC基本对话框上绘图呢

怎么在MFC基本对话框上绘图呢,第1张

如果将代码放在OnPaint函数中,则绘图时窗口闪烁厉害,而且程序执行效率也不高,最好是将static控件上画的图改为图像控件放一幅图上去,然后用定时器(设为05秒应该就可以了)移动那个东西让它挡在了画图的位置再挪开。

在OnPaint里面用GDI画LineTo(), 自己计算好坐标, 然后一条线段一条线段地慢慢画
谁会这么干啊 直接在画图软件中画好坐标系, 然后将整张作为背景在OnPaint中加载到你的Dialog里面就好了

CBrush pOldBrush;
CBrush brush;
brushCreateSolidBrush(m_cFillColor);//这个时候,刷子已经选好了,想填充什么图形,画就可以了
m_pMemDC->Rectangle(rect);//画一个矩形填充
m_pMemDC->SelectObject(pOldBrush);

看你要写到什么程度。
大致是数学建模和图像处理吧,再加点碰撞检测、重力计算、拉伸之类的运算,就可以当游戏引擎来用了。
你搜“游戏开源引擎开源”,有人分享自己的源代码,不过一般思路很乱,而且代码没注解,能不能读懂很难说了。
2D的游戏地图,我说下思路吧。
你可以认为是类似美图秀秀,你把一张图的某个动物,或者什么的,当做素材,然后用画笔画在DC上,还有其他素材,也可以画在上面。这时候,你想,要做漂亮点,想修饰下,然后又是美图秀秀里的功能,比如亮化、模糊之类的方法调用。
这时候,你考虑怎么让人物动起来,毕竟游戏的角色不动,怎么能叫游戏。
其实也简单。一个动作,可以拆成N个,你分别把这些画出来,设定好时间间隔。
3D的,就相对复杂了,我想,你如果懂2D的原理,3D也就能自己想通。

MFC控件的使用方法

VC++60控件工具箱:
2 图形控件(picture):常用于显示位图(Bitmap)和图标(Icon)

3 静态文本(Static Text):用来在指定的位置显示特定的字符串,一般用来标识附近另一个控件的内容。显示在静态文本控件中的字符串一般不再改变,但是在需要的时候,也可以通过调用相应的函数来进行设置。MFC提供了CStatic类支持静态控件。

4 编辑框(Edit Box):用来接收用户输入的字符串。通过选择编辑框的选项,编辑框可以接收字符串、数字、密码等;编辑框还可以设置成接收多行字符串的模式;可以自动进行大小写转换。编辑框可能向其父窗口发送多种控件通知,如果用户需要,可以对这些控件通知进行处理。MFC提供了CEdit类支持编辑框控件。

5 组成框(Group Box):用来包围具有逻辑关系的一组控件,在这些控件的周围加上边界和标题。需注意的是,组成框仅仅是在视觉效果上对控件进行“成组”,真正的“成组”工作还需要另外一些工作。

6 按钮(Button):用来接收用户的命令,应用程序在接收到用户命令后,通常需要进行一些后台工作。按钮可以响应单击或双击动作,在按钮接收到鼠标动作后,向其父窗口发送相应的控件通知,用户可以对这些控件通知进行消息映射,从而进行相应的处理。在一个对话框中,可以定义一个默认按钮,这只要选中按钮属性中的“Default”选项。如果在对话框活动的时候按下了Enter键,则等同于单击了默认按钮。MFC提供了CButton类支持按钮控件。

7 复选框(Check Box):用来显示某种可能的选择,该项选择是独立的,用户可以选中或取消该选项。在选项被选中的时候核选标记出现,选项被取消时核选标记消失。MFC中由CButton类对核选框进行支持,用户可以通过SetCheck()函数和GetCheck()函数设置或获取核选框当前的状态。

8 单选按钮(Radio Button):用来选择某种可能的选择,与核选框不同,该选项不是独立的。一般是几个单选按钮组成一组,同组中的单选按钮可以有也只能有一个按钮被选中。MFC同样使用CButton类对单选按钮控件进行支持,SetCheck()函数和GetCheck()函数对单选按钮也是适用的。

9 组合框(Combo Box):列表框和编辑框的组合,用户除了可以在列表中对已经存在的选项进行选择外,还可以输入新的选择。MFC提供了CComboBox类对组合框控件进行支持。

10 列表框(List Box):用来选择一系列的可能选择,用户通过滚动条可以在这些选择中浏览。在列表框中,可以进行单项选择,也可以进行多项选择,这取决于用户在控件属性对话框中的设置。MFC提供了CListBox类对列表框控件进行支持。

11、12 滚动条(Scroll Bar):这包括水平滚动条和垂直滚动条,除了在视觉效果上的方向不同外,水平滚动条在被滚动时发生WM_HSCROLL消息,而垂直滚动条在被滚动时发送WM_VSCROLL消息。MFC提供了CScrollBar进行支持。

13 微调按钮(Spin Button):包括一对紧靠在一起的上下箭头,使用微调按钮可以增大或者缩小某个特定的数值。微调按钮往往都需要一个“伙伴”控件,这通常都是一个编辑框。当微调按钮的向上箭头被单击时,编辑框中的数字就增大;反之则减小。MFC提供了CPinButtonCtrl类进行支持。

14 进度条(Progress):在进行一项需要占有较长时间的 *** 作时来反应当前的进度。当 *** 作的进度不断前进时,进度条就用特色颜色填充进度条框。用户可以设定进度条的范围和当前位置。MFC提供了CProgressCtrl类进行支持。

15 滑块控件(Slider):通常用来在程序中接受一系列离散的数值。用户可以设置滑块控件的取值范围,并可以为控件加上刻度标记以显示特定位置的含义。MFC提供了CSliderCtrl类进行支持。

16 热键控制(Hot Key):热键控件看起来就像一个编辑框,但是在热键控件中能够立刻反应用户刚刚按下的键组合,这在设置程序的热键时特别有用。热键控件只是在“视觉”上显示了按键组合,设置热键的工作还需要用户添加代码完成。MFC提供了CHotKey类进行支持。

17 列表控制(List Control):按一定的排列顺序显示一系列带图标的字符串,列表控件提供了四种显示模式:大图标、小图标、列表和详细信息。用户可以向列表控件中添加新的项,也可以控制列表控件的显示模式。MFC提供了CListCtrl类进行支持。

18 树形控件(Tree Control):用来显示一系列项目的层次关系,最典型的例子是显示磁盘上的文件与文件夹。如果有子项目的话,单击树形控件中的项目可以展开或者收缩其子项目。MFC提供了CTreeCtrl类进行支持。

19 属性表控件(Tab Control):用来包含大量的控件,可以满足用户显示或者获取大量数据的要求。每个属性表又分为好几个属性页,这些属性页由各自的标签进行区分,这些属性页中都可以包容其他控件。在显示属性表的时候,一次只能够显示一个属性页的全部内容,同时显示其他属性页的标签,用户通过单击标签打开相应的属性页。MFC提供了CTabCtrl类进行支持。

20 动画控件(Animation):用来播放一段AVI格式的视频剪辑。用户可以控制视频剪辑的播放、停止和定位,但也仅限于这些功能。动画控件设置不能播放音频剪辑,如果用户需要更高层次的视频或者音频的支持,请选用MCIWnd控件。MFC提供了CAnimateCtrl类对动画控件进行支持。

21 高级编辑框(Rich Edit):编辑控件功能的扩展。在高级编辑框中,除了简单的输入和编辑字符串外,用户还可以为字符或段落指定特定的格式,用户甚至还可以向高级编辑框中插入OLE项。高级编辑框基本上实现了一个带格式的文本编辑器功能,而只需要用户添加少量的接口。MFC提供了CRichEditCtrl类进行支持。

22 日历控件(Month Calender):看似与真正的日历类似, *** 作也类似,直观的为用户提供了观察和显示当前日期的途径。MFC提供了CMonthCalCtrl类进行支持。

23 日期/时间选择器(Date Time Picker):向用户提供了一种直观的选择日期和时间的方法、日期/时间选择器在外观上类似于一个组合框,但是当用户单击下拉箭头时就会展开一个日历控件供用户选择,而一旦用户做出了选择,日期/时间选择器会自动显示新的日期/时间。MFC提供了CDateTimeCtrl类进行支持。

24 IP地址控件(IP Adress):IP地址控件用来输入和编辑IP地址。该控件外观类似于一个编辑框,但是可以自动对输入的字符按3个一组进行区分和加间隔圆点。IP地址控件为开发支持Internet技术的程序提供了方便。MFC提供了CIPAddressCtrl类进行支持。

26 扩展组合框(Extended Combo Box):在普通组合框的基础上还支持图像列表。即,可以在组合框中显示特定的图标表示相应的选择,而不仅仅是显示文本。MFC提供了CComboBoxEx类进行支持。

所有控件的公共属性:

ID:控件的资源标识。

Visiable:控件是否可见。

Disabled:控件是否被禁止、被禁止的控件无法接受键盘和鼠标输入。

Group:是否从这个空间开始一个新组。

Tab stop:在程序中是否可以用Tab键切换到这个控件。

Help ID:是否给控件分配一个帮助标识,帮助标识基于控件本身的资源标识。

Client edge:给控件增加一个凹陷的边界,使整个控件看起来像是凹下去的一样。

Static edge:给控件增加一个边界。

Modal frame:给控件增加一个3维的框架,与Client edge相反,它是凸出来的。

Transparent:拥有此属性的窗口是透明的,它下面的窗口不会被它遮掩住。

Accept files:拥有此属性的窗口可以接收拖放文件,如果一个文件被拖动到这个控件上面,控件会收到WM_DROPFILES消息。

No parent notify:表示控件不向其父窗口发送WM_PARENTNOTIFY消息。

Right aligned text:表示文本右对齐。

以上属性可通过控件的属性对话框进行设置,在属性对话框中按F1键可以查看属性的帮助信息。

每一种控件都由一个MFC控件类来管理,当通过资源编辑器在对话框上添加一个控件时,visualC++会自动为控件类生成一个实例,即对象,并调用构造函数,当对话框关闭时,其各个子控件对象被自动销毁。

也可以不使用资源编辑器,自己在程序中写代码创建、显示控件并设置控件的属性。

所有的控件类都继承自CWnd,控件的某些 *** 作和属性设置需要用到CWnd本身的成员函数,CWnd某些函数经常用来 *** 纵控件和设置控件属性。

SetWindowText:设置控件上要显示的标题文本,即用来设置控件的caption属性

GetWindowText:得到控件的标题文本。

EnableWindow:设置控件的Disabled属性,即社会自控件是否可以接收键盘和鼠标的输入。

SetWindowPos:改变窗口的大小、位置和Z轴次序。

MoveWindow:改变窗口的大小和位置

GetWindowRec:得到窗口的大小、位置(信息存放在一个矩形结构中)。

GetClientRect:得到窗口客户区的大小(信息存放在一个矩形结构中 )。

ShowWindow:设置窗口的可见性(即窗口是否可见)。

SetWindowText/GetWindowText还可以用来设置/得到对话框的标题文本。

如何制作带MFC界面的DLL,解答如下

新建MFC DLL项目,项目名称“MyDLL”,创建新解决方案,解决方案名称为“MFCDLL”。

步骤阅读2进入MFC DLL向导,选择下一步,选择“使用共享MFC DLL的规则DLL”。点击“完成”按钮。

步骤阅读步骤阅读3创建MFC DLL项目成功。运行时库选择:属性-->c/c++-->代码生成-->运行库  “多线程调试 DLL (/MDd)”。

步骤阅读步骤阅读4点击项目右键,添加MFC类。输入类名:IHpDllWin,选择基类:CDialog,点击完成。

步骤阅读步骤阅读5动态库将定义一个导出函数,该函数返回导出界面基类的指针。在IHpDllWincpp写导出接口:

// 定义导出接口

extern "C" __declspec(dllexport) IHpDllWin ShowDialog()

{

// 切记,此处需要加下面这行代码,不然对话框显示不出来。

AFX_MANAGE_STATE(AfxGetStaticModuleState());

IHpDllWin ph = new IHpDllWin;

ph->Create(IHpDllWin::IDD);

ph->ShowWindow(SW_SHOW);

return ph;

}

6生成MyDLLdll。MFC DLL程序创建完成。

7新建MFC应用程序,名称为MyMFC,解决方案名称为MFCEXE。

步骤阅读8进入MFC应用程序向导,点击下一步,应用程序类型选择“基于对话框”,然后一直点击下一步,最后点击完成。

步骤阅读步骤阅读步骤阅读9在对话框中拖入按钮,双击该按钮,进入代码编辑。

步骤阅读10采用动态方式调用该动态库,调用步骤如下:

1加载动态库

HINSTANCE  m_hDll = LoadLibrary("MyDLLdll");

if (NULL == m_hDll)

{

MessageBox("加载 MyDLLdll 失败");

}

 2获取导出函数指针

  typedef IHpDllWin (hpDllFun)();

  hpDllFun pShowDlg = (hpDllFun)GetProcAddress(m_hDll,"ShowDialog");

if (NULL==pShowDlg)

{

MessageBox("DLL中函数寻找失败");

return;

}

  3获取导出类对象指针

      IHpDllWin m_hpwin = pShowDlg();

      获取导出窗口类指针,获取了对该导出窗口的控制。

步骤阅读11把MyDLLdll拷到目标工程的Debug目录下,复制IHpDllWinh到目标工程的目录下。

12添加IHpDllWinh,右键,添加现有项,选择IHpDllWinh,添加。

步骤阅读步骤阅读13在MyMFCDlgcpp头部加入#include "IHpDllWinh",然后编译生成exe。主界面完成。

14运行。按“Ctrl+F5”运行,运行结果如图。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13387593.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-26
下一篇 2023-07-26

发表评论

登录后才能评论

评论列表(0条)

保存