mfc加密解密总结

2024-04-12

mfc加密解密总结(共5篇)

篇1:mfc加密解密总结

mfc编程实验总结报告 知识总结+个人心得 2011年暑期mfc编程实验报告 mfc编程实验个人总结报告

一、mfc类、函数等知识小结:

1、settimer(1, m_intlevel, null);在mfc程序中settimer被封装在cwnd类中,调用就不用指定窗口句柄了于是settimer函数的原型变为: uint settimer(uint nidevent,uint nelapse,void(callback export *lpfntimer)(hwnd,uint ,yint ,dword))当使用settimer函数的时候,就会生成一个计时器。函数中nidevent指的是计时器的标识,也就是名字。nelapse指的是时间间隔,也就是每隔多长时间触发一次事件。第三个参数是一个回调函数,在这个函数里,放入你想要做的事情的代码,你可以将它设定为null,也就是使用系统默认的回调函数,系统默认认的是ontime函数。这个函数怎么生成的呢?你需要在需要计时器的类的生成ontime函数:在classwizard里,选择需要计时器的类,添加wm_time消息映射,就自动生成ontime函数了。然后在函数里添加代码,让代码实现功能。每隔一段时间就会自动执行一次。例: settimer(1,1000,null);1:计时器的名称;

1000:时间间隔,单位是毫秒; null:使用ontime函数。

当不需要计时器的时候调用killtimer(nidevent);例如:killtimer(1);killtimer(1);

2、typedef struct{};(1)struct{ int x;int y;}test1;好,定义了 结构 test1,test1.x 和 test1.y 可以在语句里用了。(2)struct test {int x;int y;}test1;定义了结构 test1,test1.x 和 test1.y 可以在语句里用了。

与(1)比,省写 了 test(3)typedef struct test {int x;int y;}text1,text2;此处时说了这种结构体(类型)别名 叫 text1 或叫 text2,而不是定义了结构体变量.真正在语句里用,还要写: text1 test1;//定义结构体变量

然后好用 test1.x test1.y 或写 text2 test1;//定义结构体变量

然后好用 test1.x test1.y

3、invalidate();//让客户区无效,即时重新绘制客户区 void invalidate(bool berase = true);该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时windows会在应用程序的消息队列中放置wm_paint消息。mfc为窗口类提供了wm_paint的消息处理函数onpaint,onpaint负责重绘窗口。视图类有一些例外,在视图类的onpaint函数中调用了ondraw函数,实际的重绘工作由ondraw来完成。参数berase为true时,重绘区域内的背景将被擦除,否则,背景将保持不变。

4、cdc::rectangle(左上x,左上y,右下x,右下y);使用该函数画一个矩形,可以用当前的画笔画矩形轮廓,用当前画刷进行填充。

函数原型:bool rectangle(hdc hdc, int nleftrect, int ntoprect, int nrightrect, int nbottomrect);

hdc:设备环境句柄。

nleftrect:指定矩形左上角的逻辑x坐标。ntoprect:指定矩形左上角的逻辑y坐标。nrightrect:指定矩形右下角的逻辑x坐标。nbottomrect:指定矩形右下角的逻辑y坐标。

5、cbrush:: cbrush//画刷类 eg:cbrush brushstick(rgb(127, 127, 127));四种构造函数: cbrush();cbrush(colorref crcolor);cbrush(int nindex, colorref crcolor);cbrush(cbitmap* pbitmap);参数说明: crcolor指定画刷的前景色(rgb方式)。如果画刷是阴影线型的,则指定阴影线的颜色。nindex指定画刷阴影线采用的风格,取值如下: hs_bdiagonal45度的向下影线(从左到右)hs_cross水平和垂直方向以网格线作出阴影 hs_diagcross 45度的网格线阴影 hs_fdiagonal 45度的向上阴影线(从左到右)

hs_horizontal 水平的阴影线 hs_vertical 垂直的阴影线 pbitmap指向cbitmap对象的指针,该对象指定了画刷要绘制的位

图。

构造函数说明:

6、messagebox(game over!);messagebox(null,text,title,button);参数title:string类型,指定消息对话框的标题。text:指定消息对话框中显示的消息,该参数可以是数值数据类型、字符串或boolean值。icon:icon枚举类型,可选项,指定要在该对话框左侧显示的图标。button:button枚举类型,可选项,指定显示在该对话框底部的按钮。default:数值型,可选项,指定作为缺省按钮的按钮编号,按钮编号自左向右依次计数,缺省值为1,如果该参数指定的编号超过了显示的按钮个数,那么messagebox()函数将使用缺省值返回值integer。函数执行成功时返回用户选择的按钮编号(例如1、2、3等),发生错误时返回-1。如果任何参数的值为null,messagebox()函数返回null。

函数原型:

messagebox.show(text,title,messageboxbuttons,messageboxicon ,messageboxdefaultbuttons)参数说明:

(1)text:必选项,消息框的正文。

(2)title:可选项,消息框的标题。(3)messageboxbuttons:可选项,消息框的按钮设置,默认只显示【确定】按钮。ok――确定 okcancel――确定和取消 abortretryignore――终止、重试和忽略 yesnocancel――是、否和取消 yesno――是和否 retrycancel――重试和取消

(4)messageboxicon:对话框中显示的图标样式,默认不显示任何图标。

question――问号 information、asterisk――i号 error、stop、hand――错误号 warning、exclamation――!号 none――不显示任何图标

(5)messageboxdefaultbuttons:可选项,对话框中默认选中的按钮设置。

defaultbutton1――第1个button是默认按钮 defaultbutton2――第2个button是默认按钮 defaultbutton3――第3个button是默认按钮

7、memcpy(拷贝目的地,拷贝对象,拷贝长度);包含在头文件#include

函数原型:

extern void *memcpy(void *destin, void *source, unsigned n);功能:

由source指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。eg: int a=5,b=9;memcpy(a,b,sizeof(a));//将b按位拷给a;说明:

1.source和destin所指内存区域不能重叠,函数返回指向destin的指针。2.与strcpy相比,memcpy并不是遇到就结束,而是一定会拷贝完n个字节。篇三:mfc个人心得体会 mfc个人心得体会 06a13526 余思远

时间过得很快,历时一个月的短学期即将结束,我们小组的mfc课题也基本完成。虽然只有短短的一个月,但却带给我很多。在小组成员的共同努力下,基本解决了计划中的一个个问题,要实现一个功能并不算复杂的计算器,也没有想象中那么简单。mfc涉及的概念很多,语法也与以前有些许不同,在c++基础上新增的内容也有许多。从开始编辑一个简单的界面,通过这段时间的学习,终于感到掌握了些许了,但想更加熟练的使用,也必须付出更多的时间吧。我发现在编程过程中,并不能只想着眼前所负责的这一块,许多对许多综合多方面进行考虑,需要与自己队友进行配合,作出合理的计划和安排。

实践是检验真理的唯一标准,这次mfc的实践活动,让我学习到了很多知识,弥补了很多漏洞。这个看似简单对我们来说却付出了很多时间和精力的程序,让我体会到了mfc相比与单纯的c++的优越性。程序编译过程中的有些困难虽然我们的能力范围内也无法解决,但是在网上资料的参考,读懂他人资料、相关程序的基础上,我们也完成了这个程序。相信这个经历能对以后的编程有很大的帮助。我也从此次课程设计中体会到了团队合作的乐趣和力量。在一个团队中扬长避短,发挥自己应有的作用,能让我们更加容易地去克服一个又一个难关。篇四:c++(mfc)程序设计实践报告

中南大学

本科生课程设计(实践)任务书、设计报告

(c++语言程序设计)题 目 学生姓名 指导教师 学 院 专业班级 学生学号

计算机基础教学实验中心

年 月 日

目 录

设计任务书?3 课程实践报告4

一、实践内容??4

二、实践成果??4

三、程序功能??4

四、设计思路??5

五、源程序???7

六、运行情况??13

七、实践心得??16

八、实践收获与不足???18 c++语言程序设计任务书

指导老师:李力

课程编号:

一、学时与学分

学时:40 学分:2

二、实践目的计算机实践是本科计算机基础教学的一个重要环节。它对于巩固学生的计算机基础知识,增强学生的计算机应用水平,改善学生的知识结构,具有重要意义。

三、实践任务与要求

用c++语言编程。编程题目如下:

(一)统计一个班(最多有35人)的学生成绩,要求能实现如下功能:(1)输入每个学生的学号和6门课程的成绩。(2)计算每个学生的平均分和总分。(3)按总分从高到低排出名次,并按名次输出每个学生的情况,包括学号、各科成绩、平均分和总分。(4)根据用户要求输出某门课程(从键盘输入课程号)成绩在90分以上(含90分)且总分在前5名的学生情况,包括学号、各科成绩、平均分和总分。(5)根据统计,绘制总成绩五分制百分比饼图。(自学利用c++提供的库函数绘制曲线图)。要求:利用类来实现,学生学号和成绩采用文件输入,排序。数据的组织可采用对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。

(二)统计商品销售数据,要求能用菜单实现如下功能:(1)输入每件商品的名称,编号,入库日期,标价,成本。(2)输入每件商品的售价,出售日期。(3)按总销售量从高到低排出每种商品的名称,售出件数,销售额。(4)根据用户要求输出某商品某月(从键盘输入商品名称和月份)的平均售价、售出件数、总利润。(5)根据统计,绘制商品销售利润百分比饼图。(自学利用c++提供的库函数绘制曲线图)。要求:利用类实现,数据采用文件输入,排序。数据的组织可采用对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。

(三)统计足球比赛数据,要求能用菜单实现如下功能:(1)输入每场比赛的主队名称,客队名称,比赛日期,主队得分,客队得分。(2)按总得分从高到低排出每个队的名称,总得分,胜,和,负的次数。(3)根据用户要求输出某队某月(从键盘输入队名和月份)的所有比赛数据。(4)根据用户要求输出某队主场总得分,客场总得分(5)根据用户输入,绘制某队成绩历史趋势图。(自学利用c++提供的库函数绘制曲线图)。要求:利用类实现,数据采

用文件输入,排序。数据的组织可采用对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。

(四)统计稿件管理数据,要求能用菜单实现如下功能:(1)输入每件稿件的第一作者名字,稿件名称,投稿日期,作者的省份。(2)输入每件稿件的发表日期,审稿意见。(3)按作者的省份,从高到低排出每个省的总发表篇数。(4)根据用户要求输出某作者某月(从键盘输入作者名和月份)的所有稿件数据。(5)根据用户输入,绘制稿件按省份的百分比饼图。(自学利用c++提供的库函数绘制曲线图)。要求:利用类实现,数据采用文件输入,排序。数据的组织可采用对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。

(五)统计用电管理数据,要求能用菜单实现如下功能:(1)输入每个电表的用户名,楼栋号,抄表日期,电表读数。(3)按作者的用电量,从高到低排出每个用户的总用电量。(3)根据用户要求输出某用户某月(从键盘输入用户名和月份)的总用电量。(4)统计某楼栋从某月到某月(从键盘输入)的总用电量(5)绘制按的楼栋的用电百分比饼图。(自学利用c++提供的库函数绘制曲线图)。要求:利用类实现,数据采用文件输入,排序。数据的组织对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。

以上五题任选一题。

四、实践纪律

学生除了要遵守实践期间学院的基本规定外,还要求做到: 1.必须在规定的时间、地点,独立完成以上任务; 2.不得迟到、早退。尤其不得擅自缺席。

五、设计报告要求

1. 任务书必须作为报告第一页 2. 报告不得少于3000字:主要总结实践心得、实践成果、程序功能、设计思路(程序流程图)、源程序(加上必要的注释)、运行情况、课程设计的收获与不足等

六、时间安排

两周时间

七、成绩评定规则

成绩分为优、良、中、及格、不及格五等。

优:程序功能完备,报告有深度, 遵守实践纪律。

良:程序功能满足要求,报告有内容, 遵守实践纪律。

中:程序和报告基本满足要求, 遵守实践纪律。

及格:程序有错误但大体能运行,有报告书,基本遵守实践纪律。

不及格:程序完全错误或严重违反实践纪律。c++语言程序设计报告

一、实践内容

统计稿件管理数据,要求能用菜单实现如下功能:(1)输入每件稿件的第一作者名字,稿件名称,投稿日期,作者的省份。(2)输入每件稿件的发表日期,审稿意见。(3)按作者的省份,从高到低排出每个省的总发表篇数。(4)根据用户要求输出某作者某月(从键盘输入作者名和月份)的所有稿件数据。(5)根据用户输入,绘制稿件按省份的百分比饼图。(自学利用c++提供的库函数绘制曲线图)。

二、实践成果

灵活运用《c++程序设计》课程所学的基础知识,独立设计大型程序的能力;该程序必须用户界面友好、操作简洁方便,大大提高工作效率。

此程序先由用户输入数据,并存储。再作各种功能处理。整个程序基本可以实现稿件管理数据系统的统计。

三、程序功能 a)录入功能:可以写入关于稿件的基本信息,并进行以下几项功能。b)排序功能:用户可按作者的省份,将每个省的总发表篇数进行排序,并

输出。

c)查询功能:用户可根据作者与月份查出某作者某月的稿件数据,没找到的给予提示。d)绘制饼状图功能:系统根据输入的数据绘制高价男生份的百分比饼图。e)各项退出功能:在每个环节里都设有退出功能。

四、设计思路

统计稿件管理数据系统程序框图篇五:mfc心得 mfc学习心得

时光如梭,不知不觉短学期已经结束一个月左右了。对于mfc,这种c++的高级应用,从陌生到熟悉,从茫然到大致了解,从不屑一顾到很感兴趣,在编写飞行棋这个游戏的过程中感触良多,也收获了许多。mfc跟以前的控制台编程有比较大的差异,实现了部分可视化编程。对于其中复杂的类和函数,刚开始的时候感到相当的恐慌。虽然在暑假的时候有看过一些书,但到真正做起来却仍然觉得很吃力。第一次上mfc的课,老师一下子讲了很多东西,主要是控件,对于如此繁复的知识感觉一片茫然。整个理论课上了四节,虽然老师也讲了一些东西,但是对于我们要做的系统却是远远不够的。所以,很多东西都需要我们自学,到图书馆借书,到网上查找资料,问同学,问老师……我们使用各种方法获取知识。

必须学会自学,这是短学期的编程课带给我的一大感触。虽然我们需要做的只是一个小型的游戏,但对于初次接触窗口编程的我们难度依然是非常大了。但是,我们克服了,通过我们的团结协作。

要学会团结协作是我另一大感触。小组中各个组员的通力合作是编程工作能够顺利进行的一大关键,我们进行了明确的分工,却又能互相合作,互相参考,互相帮助。只有这样,才会有最后的飞行棋游戏新鲜出炉。

在编程过程中,我主要负责的部分是图形设计和界面美化部分。这部分的特点是:既与大一所学的控制台编程紧密联系,又必须要和现在所学的窗口程序编程相衔接。代码基本上靠逐行输入,考验的是自己的逻辑思维能力和严谨态度。其实,这部分的代码并不是特别多,所以编写代码的工作也并不是很难的。最磨练人的耐性的是将写好的代码进行调试。由于程序长度相对于原来的编程根本不属于同一个数量级,所以调试理所当然地变得痛苦起来。并且,这些代码基本上在编译时都能够一次通过,但在实际运行时却老是出错,检查算法和语法又不得要领。这个时候,就不得不耐着性子,用调试工具逐行调试了。学会了一些调试技巧,这不得不说是编程过程中我的一大收获。很久以前,我认为程序就是在头脑中思考一下就立即ok,而且程序先写出来再说, 然后再改就是,人的认识总是慢慢前进的!经过了短学期的编码和试验,彻底打破了以前的一些思维,其实程序只是人的思维的体现而已,因而重要的是思想,所以在构架整体框架的时候,先写一些程序验证是很必要的,而在程序开发的过程中,其如果对工程不是很了解的阶段,也只能算是在为整体框架做必要的验证,所以一般的工程的周期长于我们想象的那样!尽管mfc这门课程已经结束了,但是我还会继续学习下去,希望自己将来能够对编程有更加深入的了解。

篇2:mfc加密解密总结

CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_CBOX_CANTILEVER, m_combox_cantilever);} 这个函数是类自动生成的,一般情况下用add variable添加控件变量之后会自动生成DDX_Control(pDX, IDC_CBOX_CANTILEVER, m_combox_cantilever);这行代码 如果是用代码添加控件变量的话,要手动加上这一句,ID号和相应的变量名 2.对combo box添加变量之后用下面的代码添加下拉框的选项

m_combox_cantilever.AddString(_T(“haha”));m_combox_cantilever.SetCurSel(0);CDlgSysF9AdjOrigin SysF9AdjOringin;//类名定义一个变量 SysF9AdjOringin.DoModal();//弹窗操作 记得包含CDlgSysF9AdjOrigin的头文件

4.画刷的使用,改变字体颜色和背景颜色【字体颜色、字体的背景颜色、大背景颜色】

CBrush m_brush;记得初始化画刷

m_brush.CreateSolidBrush(RGB(128,128,128));if(pWnd->GetDlgCtrlID()==IDC_STC_ROLL)

5.在list control 中添加控件变量后插入一列的操作

m_List.InsertColumn(0,_T(“G1F-X”));插入一行

m_List.InsertItem(1,_T(“G1F-X”));m_list1.InsertColumn(0, _T(“HEAD”),Width, ListCtrlEx::Normal, LVCFMT_CENTER, ListCtrlEx::SortByDigit);

6.用代码获取edit box的指针并设置editbox只读

CEdit* pEdit =(CEdit*)GetDlgItem(IDC_EDIT_HOFFSET);Edit-> SetReadOnly(TRUE);SetDlgItemText(IDC_EDIT_HPOSITION,L“0.000”);8.设置一个控件disable GetDlgItem(IDC_CHECK_MANUAL)->EnableWindow(FALSE);9.隐藏或显示控件

m_check_auto.ShowWindow(SW_HIDE);m_check_auto.ShowWindow(SW_SHOW);10.button上添加icon 7.设置对话框中某一控件中现实的文本 {

} pDC->SetTextColor(RGB(0,0,0));// 设置字的颜色 pDC->SetBkColor(RGB(128,128,128));// 设置背景颜色 hbr=m_brush;3.按钮button弹出对话框的代码 CButtonST m_btn_move;m_btn_move.SetIcon(IDI_ICO_MOVE);m_btn_move.SetFlat(FALSE);//设置按钮为非平面效果的按钮 11.定义指针变量 CComboBox *m_pCamera;m_pCamera=NULL;m_pCamera=(CComboBox*)GetDlgItem(IDC_BOX_CAMERA);//获?取¨?combobox窗ä¡ã口¨²指?针? m_pCamera->AddString(L“标À¨º准Á?相¨¤机¨²1”);m_pCamera->SetCurSel(0);12.SetItemText给list control中的单元添加文本

SetItemText这个函数一共有三个参数,第一个是要设置文本的项目号,第二个是子项目号,第三个是要设置的文本。

13.获得控件的坐标

CRect listRect;m_list1.GetClientRect(&listRect);int Width=(listRect.Width())/5;14.传送带实例

void CDlgSysF9Conveyor::OnLButtonDown(UINT nFlags, CPoint point){

// TODO: Add your message handler code here and/or call default // when btn down on 123,select which rectangle is show on 123 CRect rect1;CRect rect2;CRect rect3;GetDlgItem(IDC_STATIC_FIRST)->GetWindowRect(&rect1);ScreenToClient(rect1);if(rect1.PtInRect(point)){

} GetDlgItem(IDC_STATIC_SECOND)->GetWindowRect(&rect2);ScreenToClient(rect2);if(rect2.PtInRect(point))CBitmap bitmap;bitmap.LoadBitmap(IDB_BMP_WHITE);((CStatic*)GetDlgItem(IDC_STATIC_FIRST))->SetBitmap(static_cast< bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_SECOND))->SetBitmap(static_cast< bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_THIRD))->SetBitmap(static_cast< m_combox_station.SetCurSel(0);HBITMAP >(bitmap.Detach()));HBITMAP >(bitmap.Detach()));HBITMAP >(bitmap.Detach()));

} {

} GetDlgItem(IDC_STATIC_THIRD)->GetWindowRect(&rect3);ScreenToClient(rect3);if(rect3.PtInRect(point)){

} //combox

CDialogEx::OnLButtonDown(nFlags, point);CBitmap bitmap;bitmap.LoadBitmap(IDB_BMP_WHITE);((CStatic*)GetDlgItem(IDC_STATIC_THIRD))->SetBitmap(static_cast< bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_FIRST))->SetBitmap(static_cast< bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_SECOND))->SetBitmap(static_cast< m_combox_station.SetCurSel(2);CBitmap bitmap;bitmap.LoadBitmap(IDB_BMP_WHITE);((CStatic*)GetDlgItem(IDC_STATIC_SECOND))->SetBitmap(static_cast< bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_FIRST))->SetBitmap(static_cast< bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_THIRD))->SetBitmap(static_cast< m_combox_station.SetCurSel(1);HBITMAP >(bitmap.Detach()));HBITMAP >(bitmap.Detach()));HBITMAP >(bitmap.Detach()));HBITMAP >(bitmap.Detach()));HBITMAP >(bitmap.Detach()));HBITMAP >(bitmap.Detach()));void CDlgSysF9Conveyor::OnLButtonUp(UINT nFlags, CPoint point){

// TODO: Add your message handler code here and/or call default CRect rect1;CRect rect2;CRect rect3;switch(m_flag){

case Flg2:

{

// when btn down on 123,select which rectangle is show on 123 GetDlgItem(IDC_STATIC_FIRST)->GetWindowRect(&rect1);ScreenToClient(rect1);if(rect1.PtInRect(point)){

} GetDlgItem(IDC_STATIC_SECOND)->GetWindowRect(&rect2);ScreenToClient(rect2);if(rect2.PtInRect(point)){

} GetDlgItem(IDC_STATIC_THIRD)->GetWindowRect(&rect3);ScreenToClient(rect3);if(rect3.PtInRect(point)){

CBitmap bitmap;bitmap.LoadBitmap(IDB_BMP_WHITE);((CStatic*)GetDlgItem(IDC_STATIC_THIRD))->SetBitmap(static_cast< bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_FIRST))->SetBitmap(static_cast< CBitmap bitmap;bitmap.LoadBitmap(IDB_BMP_WHITE);((CStatic*)GetDlgItem(IDC_STATIC_SECOND))->SetBitmap(static_cast< bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_FIRST))->SetBitmap(static_cast< bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_THIRD))->SetBitmap(static_cast< CBitmap bitmap;bitmap.LoadBitmap(IDB_BMP_WHITE);((CStatic*)GetDlgItem(IDC_STATIC_FIRST))->SetBitmap(static_cast< bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_SECOND))->SetBitmap(static_cast< bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_THIRD))->SetBitmap(static_cast< HBITMAP >(bitmap.Detach()));HBITMAP >(bitmap.Detach()));HBITMAP >(bitmap.Detach()));HBITMAP >(bitmap.Detach()));HBITMAP >(bitmap.Detach()));HBITMAP >(bitmap.Detach()));HBITMAP >(bitmap.Detach()));HBITMAP >(bitmap.Detach()));

}

}

}

} bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_SECOND))->SetBitmap(static_cast< HBITMAP >(bitmap.Detach()));m_flag=Flg1;ClipCursor(NULL);// If this parameter is NULL, the cursor is free to move anywhere on //m_startRect=false;

CDialogEx::OnLButtonUp(nFlags, point);the screen.16.list control中获得选中的位置索引

//获得list control被选中的列的索引

void CDlgSysF9CameraZroffset::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult){ LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);// TODO: Add your control notification handler code here //找出鼠标位置

DWORD dwPos = GetMessagePos();CPoint point(LOWORD(dwPos), HIWORD(dwPos));m_list1.ScreenToClient(&point);//定义结构体

LVHITTESTINFO lvinfo;lvinfo.pt = point;lvinfo.flags = LVHT_ABOVE;int nItem = m_list1.SubItemHitTest(&lvinfo);if(nItem!=-1){

//CString strtemp;

//strtemp.Format(_T(“所选中的是第%d行D第%d列”), lvinfo.iItem, lvinfo.iSubItem);//AfxMessageBox(strtemp);int column=lvinfo.iSubItem;switch(column){ case 1:

GetDlgItem(IDC_BTN_TEST_ZOFFSET)->EnableWindow(TRUE);GetDlgItem(IDC_BTN_TEST_NOZZLE)->EnableWindow(FALSE);m_check_manual.ShowWindow(SW_SHOW);m_check_auto.ShowWindow(SW_SHOW);break;GetDlgItem(IDC_BTN_TEST_ZOFFSET)->EnableWindow(FALSE);//获取单击所在行数

case 2:

} GetDlgItem(IDC_BTN_TEST_NOZZLE)->EnableWindow(TRUE);m_check_manual.ShowWindow(SW_HIDE);m_check_auto.ShowWindow(SW_HIDE);break;17.C++中 public,protected,private 访问标号小结

第一:private, public, protected 访问标号的访问范围。private:只能由1.该类中的函数、2.其友元函数访问。不能被任何其他访问,该类的对象也不能访问。

protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。但不能被该类的对象访问。

public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,也可以由4.该类的对象访问。

篇3:MFC规则DLL总结

1、创建MFC规则DLL工程,生成XX.h, XX.cpp, XX.def文件,插入资源(对话框),生成类。

2、在XX.cpp 中添加ShowDlg函数,在该函数中定义对话框,显示对话框,对话框所需要的参数由ShowDlg的形参传递。

3、在XX.def中添加:

EXPORTS

;此处可以是显式导出

ShowDlg @14、编译生成XX.dll文件

5、新建测试工程,在需要调用该DLL处,添加类如下代码:

CString strName=_T(“王朋”);

double dScore=89;

HINSTANCE hdll;

typedef void(*dllfun)(CString,double);

dllfun thefunc;

hdll=LoadLibrary(_T(“RegularMFCDLL.dll”));

if(hdll!=NULL)

{

thefunc=(dllfun)GetProcAddress(hdll,“ShowScore”);

}

else

{

AfxMessageBox(_T(“加载DLL失败!”));return;} thefunc(strName,dScore);FreeLibrary(hdll);

6、静态调用

头文件中添加如下代码:

#pragma comment(lib,“RegularMFCDLL.lib”)

extern void ShowScore(CString,double);

在源文件中需要调用该DLL的函数处添加:

CString strName=_T(“王ª?朋¨®”);

double dScore=90;

ShowScore(strName,dScore);

篇4:MFC 对话框编程 -- 总结

一、创建对话框对象

1.首先利用资源编辑器创建对话框资源,并针对该对话框资源定义一个对话框类:classCTestDlg :public CDialog

2.创建话话框对象

模态对话框的创建:

如:

CTestDlgdlg;

dlg.DoModal();

非模态对话框创建:

如:

CTestDlgdlg;

dlg.Create(IDD_DIALOG, this);

但这样是得不到一个正常显示的非模态对话框的。因为模态与非模态对话框的实现方式并不相同,这里我们还要注意几点。

非模态对话框创建完成后是隐藏着的,必须调用ShowWindow来进行显示。

对于模态对话框,当执行到DoModal 函数以创建对话框时,程序会暂停执行,直至模态对话框关闭。所以创建模态对话框可以采用局部对象。

但是,对于非模态对话框,当执行Create函数时并不会暂停执行,当执行到大括号“}后Dlg局部对象被销毁生命周期结束,于是异常出现了。

解决方法有两个:

一、在View类中定义一个CTestDlg 成员变量。

二、动态创建一个CTestDlg 变量,并重写CTestDlg 类的 PostNcDestroy函数,在该函数里销毁对象 deletethis;

无论创建的是模态对话框,还是非模态对话框,当我们单击确定或取消按钮后对话框都会消失。但这时低层的操作却是不同的。

对于模态对话框,此时对话框对象的确是被销毁了,但对于非模态对话框,这时只是隐藏起来不再显示。这需要我们自己调用DestoryWindow函数来进行销毁工作。

这时我们必须重写 CTestDlg 的 OnOK、OnCancel 两个函数(这两个是基类CDialog的虚函数),在这两个函数内调用DestroyWindow函数,并注意不再调用基类CDialog相应的函数。正确地创建非模态对话框的代码如下:

CTestDlg*pDlg = new CTestDlg;

pDlg->Create(IDD_DIALOG, this);

pDlg->ShowWindow(SW_SHOW);

同时,在CTestDlg 类的 PostNcDestroy函数中销毁对象:deletethis;

二、动态创建按钮

1.在对话框类CTestDlg 中定义一个 CButton 类对象,作为其成员变量。

2.在相应的消息处理中,调用 CButton类的Create函数创建按钮。

要注意两点:

如果在调用CButton::Create创建按钮时没有指定WS_VISIBLE 风格,那么随后一定要调用这个按钮对象的ShowWindow函数,来将该按钮显示出来。

为防止该CButton关联多个按钮,这里需要进行一些设置,如下:

if(!m_btn.m_hwnd)

{

// CButton 对象m_btn 未关联一个按钮

m_btn.Create(....);

}

else

{

// CButton 对象m_btn 已关联一个按钮

其他操作...}

当然,方法并不只这一种。但这是最漂亮的方法。

三、设置控件文本文字

1.下面列举几个用来设置控件文本文字的函数:

// 取得对话框中指定控件的窗口句柄。控件通过ID标识来指定

CWnd*GetDlgItem(int nID)const;

void CWnd::GetDlgItem(int nID, HWND* phWnd)const;

// 取得窗口文本

intGetWindowText(LPTSTR lpszStringBuf, int nMaxCount)const;

voidGetWindowText(CString& rString)const;

// 设置窗口文本

voidSetWindowText(LPCTSTR lpszString);

// 取得指定控件窗口文本。控件通过ID标识来指定

intGetDlgItemText(int nID, LPTSTR lpStr, int nMaxCount)const;

intGetDlgItemText(int nID, CString& rString)const;

// 设置指定控件窗口文本。控件通过ID标识来指定

void SetDlgItemText(int nID, LPCTSTR lpszString);

// 取得指定控件窗口文本,并转化为UINT 类型返回。控件通过ID标识来指定

UINT GetDlgItemInt(int nID, BOOL* lpTrans = NULL, BOOL bSigned = TRUE)const;// 设置指定控件窗口文本,由UINT类型转化为字符。控件通过ID标识来指定

voidSetDlgItemInt(int nID, UINT nValue, BOOL bSigned = TRUE);

2.可以为对话框控件关联一个变量,在CTestDlg 类的DoDataExchange来完成数据的更新与交换。这里我们需要重点说明 DoDataExChange 函数:

首先引用MSDN的一段解释吧:Called by the framework to exchange and validate dialog data。意指框架调用此函数来改写与确认对话框数据。

其实DoDataExChange函数主要是通过DDX_TEXT(....)或 DDX_CONTROL(....)来实现数据的实时关联的。

我从我的MSDN中随便拿来一个定义:

void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, BYTE& value);

其实这个要关联的话也很简单,没有那么复杂。如下:

value = GetDlgItemInt(nIDC);

SetDlgItemInt(nIDC, value);

而DoDataExchange 函数是在UpdateData函数内部调用的。

该函数只有一个布尔型参数,b31.org 它决定了数据传送的方向:

调用UpdateData(TRUE),将数据从对话框的控件中传送到对应的数据成员中。

调用UpdateData(FALSE),则将数据从数据成员中传送给对应的控件。

UpdateData(FALSE)是将变量的值传到控件.UpdateData(TRUE)是从控件中取值到关联的变量

四、对话框伸缩功能的实现

只关联到两个函数:

// 取得指定窗口边框折尺寸

void GetWindowRect(LPRECT lpRect)const;

// 设置指定窗口(控件)的位置同尺寸

BOOL SetWindowPos(const CWnd* pWndInsertAfter, intx, inty, int cx, intcy, UINTnFlags);

五、逃跑按钮的实现

1.创建一个基于对话框的MFC 程序,删除原有的控件后,再添加两个按钮,更改两按钮名为”你能抓到我吗?“

2.打开类视图,定义一个新类CNewButton,这个新类的基类为CButton。并为此类添加一个成员变量:CNewButton*m_pbtn;

3.打开资源视图,分别为两个按钮创建两个CNewButton类关联变量:m_btn1, m_btn2;

4.在CXXXDlg中改写其OnInitDialog函数。主要添加:

m_btn1.m_pbtn = &m_btn2;

m_btn2.m_pbtn = &m_btn1;

5.对于CNewButton 类,必定其OnMouseMove函数。主要添加:

ShowWindow(SW_HIDE);

m_pbtn->ShowWindow(SW_SHOW);

编译,连接。OK

六、属性页、属性表单与向导的建立

1.创建属性页

打开资源编辑器,点击Dialog 资源并在列出的选项中,选择:IDD_PROPPAGE_LARGE。建立属性页资源。

之后,我们就可以其上添加其他控件来完善我们的属性页。关于属性页的完善操作我们在后面会谈到。

属性页资源完善后,再为每一个属性页关联一个类。

2.创建属性表单

打开类视图,添加新类CPropSheet,其基类为CPropertySheet。

之后再为其添加属性页类对象,并在其构造函数中利用AddPage函数将属性页添加到表单上。

3.消息响应

再主菜单的最后再增加一个菜单项,并为此菜单添加消息响应函数。

在此响应函数中创建属性表单:

CPropSheetpropSheet(TEXT(”属性表单"));

propSheet.DoModal();

4.向导的创建

创建一个向导类型的对话框,应该遵循创建一个标准属性表单的步骤来实现。

但在调用属性表单对象的DoModal函数之前,应该先调用SetWizardMode函数,来声明建立的是一个作为向导的属性表单。

所以,应在DoModal函数之前添加如下代码:

propSheet.SetWizardMode();

5.属性页的完善操作

首先我们要注意到属性页,澳门新濠天地官网66bb.org 在三个不同时期的关键性操作:当属性表单中的某属性页被选中,从而成为一个活动的页面时,应用程序框架就会调用OnSetActive函数。

OnSetActive 是其基类的一个虚函数,我们可以重写这个函数并在其中进行一些操作。

假设当前我们处于属性表单中的某属性页,当我们点击下一步并将进入下一个属性页时,应用程序框架会调用OnWizardNext函数。

OnWizardNext 是其基类的一个虚函数,我们可以重写这个函数并在其中进行一些操作。类似的还有OnWizardBack 同 OnWizardFinish函数。

当一个属性页被创建时,会调用其OnInitDialog函数。

篇5:MFC中字符串操作方法的总结

1.CString类,这个类在MFC中如果启用了UNICODE码后,就是CStringT类,注意在查找

MSDN时,需要查找的是CStringT这个类,该类与很多操作都是兼容的,特别是使用UNICODE码的情况下,该类提供了一个格式化字符串的函数:

Format函数,该函数可以直接将格式化的字符串用%d, %s之类的格式符来描述,举个例子来说:

CStringmystr;

inttimes = 0;

mystr.Format(_T(“This is my %d try!”), times);

值得说明的是CString提供了字符串操作的一系列函数,包括比较大小,大小写转换,字符串的连接,字符串的相等和寻找等,需要时,直接参考MSDN就可以了

2.sprintf: 虽然说CString类有着许多的优点,但是并不能包办所有的操作,最直接的一个

问题就是CString并不能直接赋值给一个字符串变量,即CString类并没有提供一种调用,可以将其内部的字符串赋值给一个字符串变量,如果要进行这种操作,则必须手动编程完成,但是某些函数中又必须要用到字符串数组类型,这个时候又面临一个问题,即字符串数组该怎样来格式化,这个时候需要调用sprintf函数,该函数是个全局函数,其调用的格式如下:

sprintf(buffer, “ String:%sn”, s);

该函数中,buffer是需要被格式化的字符串数组,而“”中的内容就是格式化内容,最后的则是各种数字或这字符串等,该函数很方便使用

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【mfc加密解密总结】相关文章:

RSA加密解密算法C语言代码05-01

透明加密05-20

文件加密权限05-02

数据加密传输05-13

信息数据加密05-21

加密调整技术05-21

机器加密技术05-22

木材加密工艺研究09-10

混沌加密技术探究论文04-20

数据加密技术探究论文04-20

上一篇:大学生小饰品店简单的创业计划书下一篇:骊山秋色作文400字