mfc近期学习总结
mfc要点(自己总结的)

将按钮置为选中状态(IDC_RADIO1为按钮ID):
((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);
编辑框控件(IDC_RESULT)显示数据(UINT rs):
SetDlgItemInt(IDC_RESULT,rs,FALSE);
添加控件(其ID不能为默认状态,否则无法关联)与其变量关联(在CDialog::DoDataExchange(CDataExchange* pDX)中):
DDX_Control(pDX, IDC_SHOWBMP(控件ID), pStatic(控件变量名,类型为CStatic));
控件显示图片(pStatic为图片控件变量):
if(hDll!=NULL)
{
lpFun pShowDlg=(lpFun)GetProcAddress(hDll,"ShowDlg"); //ShowDlg为导出的函数,pShowDlg为获得的此函数的指针
if(pShowDlg!=NULL)
pShowDlg(); //执行即可
暂停(挂起)线程(pFront为指向线程的指针):
pFront->SuspendThread();
恢复(唤醒)线程:
pFront->ResumeThread();
令窗口无效(程序重绘窗口,即调用OnDraw):
Invalidate();
InvalidateControl(); //用于控件
//此处添加导出函数的代码
}
dll导出类接口(位于头文件中,CRichStaticText为导出的函数):
class AFX_EXT_CLASS CRichStaticText : public CStatic /ec(dllexport))即可
mfc 知识点总结

mfc 知识点总结MFC库的基本组成包括以下几个部分:1. CObject类:是所有MFC类的基类,提供了对象的基本功能,包括内存管理、类型信息、对象的打印和序列化等。
2. CWnd类:是窗口类的基类,封装了Windows窗口的创建、显示、消息处理等功能。
3. CFrameWnd类:是框架窗口类,派生自CWnd类,封装了应用程序的主窗口,提供了菜单、工具栏、状态栏等UI组件。
4. CDocument类和CView类:分别是文档类和视图类,用于管理应用程序中的文档和视图。
文档类负责文档的打开、保存、关闭等操作,视图类负责文档内容的显示和交互。
5. CWinApp类:是应用程序类的基类,封装了应用程序的初始化、消息循环、资源管理等功能。
MFC库提供了丰富的类和函数,用于处理Windows应用程序的各个方面,下面将对MFC的一些重要知识点进行总结。
1. 消息处理在MFC应用程序中,窗口的消息处理是至关重要的。
MFC提供了消息映射机制来进行消息处理。
通过DECLARE_MESSAGE_MAP宏和BEGIN_MESSAGE_MAP/END_MESSAGE_MAP 宏,在类中声明消息处理函数并将消息与处理函数进行映射。
例如:```cpp// 声明消息处理函数afx_msg void OnMouseMove(UINT nFlags, CPoint point);// 映射消息到处理函数BEGIN_MESSAGE_MAP(CMyWnd, CWnd)ON_WM_MOUSEMOVE()END_MESSAGE_MAP()```2. 对话框对话框是Windows应用程序中常用的界面元素,用于与用户进行交互。
MFC提供了CDialog类和CDialogEx类来封装对话框。
开发者可以使用资源编辑器创建对话框模板,然后通过类向导生成对话框类。
对话框类中可以处理控件的事件,并通过DoModal函数或Create函数来显示对话框。
关于MFC的有些知识

关于MFC的有些知识实验⼀1、在VC++中,⼯程与各种源⽂件之间是什么关系?解答:⼯程的实质是⼀些相互关联的源⽂件的集合,可以把项⽬理解成⼀个⼯作任务, 开发环境中,⼯程包含在⼯作区间中,⼀个⼯作区可以管理多个⼯程2、⼀个VC++⼯程下会有3个⽂件夹,这3个⽂件夹分别是什么?以.cpp为后缀的⽂件会添加到哪个⽂件夹中?以.h为后缀⽂件会添加到哪个⽂件夹中?解答:分别是head Files ,Sourse Files, Resourse Files ,.cpp放在Sourse ⽂件⾥⾯,.h放在Head Files⽂件⾥3,以win32 console application⼯程为例,简述⼯程的建⽴,⽂件的添加,⼯程的编译和链接及⼯程的执⾏过程。
解答:这个就是win32 console application⼯程的实例验证过程。
实验⼆1.简述Windows应⽤程序的特点。
解答:⼀.事件驱动的程序设计它是⼀种“被动”式程序设计⽅法,程序开始运⾏时,处于等待⽤户输⼊事件状态,然后取得事件并作出相应反应,处理完毕⼜返回并处于等待事件状态。
⼆. 消息循环与输⼊消息是⼀种报告有关事件发⽣的通知。
· 事件驱动是靠消息循环机制来实现的。
· Windows应⽤程序的消息来源有以下四种:(1)输⼊消息(2)控制消息(3)系统消息(4)⽤户消息三. 图形输出Windows程序的所有输出都是图形,字符也被作为图形来处理。
· GDI提供两种基本服务:创建图形输出和存储图象。
· 绘图函数分为三类:⼀是⽂字输出;⼆是⽮量图形函数,⽤于画线、圆等⼏何图形;三是光栅(位图)图形函数,⽤于绘制位图。
四. ⽤户界⾯对象⽤户界⾯对象:窗⼝边框系统菜单框标题栏菜单栏⼯具条客户区垂直滚动条和⽔平滚动条状态栏图标光标插⼊符对话框控件消息框五.资源共享· 常见的资源包括:设备上下⽂,画刷,画笔,字体,对话框控制,对话框,图标,定时器,插⼊符号,通信端⼝,电话线等。
MFC中使用SDK个人经验总结(包含海康威视云台相机)

dlgdata.cpp Line 40 的问题首先打开C->PROGRAM FILE(X86)->Microsoft Visual Studio 11.0->VC->atlmfc->src->mfc->dlgdata.cpp打开,并在LINE40添加断点,调试找出nIDC的值,然后解决问题!如果在resource.h中找不到对应ID,又或者更改过resource.h,出现异常,应删除debug 文件夹,重新生成解决方案!!!重新生成!1.项目属性中“C/C++”->“常规”->“附加包含目录”添加SDK包中的头文件;2.项目属性中“链接器”->“常规”->“附加库目录”把对应的文件夹位置添加进去;3.项目属性中“链接器”->"输入"->“附加依赖项”添加相应的lib文件名。
4.在C***Dlg.h中添加头文件#include"GeneralDef.h"5.在C***App的初始化程序InitInstance()中添加SDK的初始化程序NET_DVR_Init();6.添加成员变量:播放句柄变量LONG m_lPlayHandle; 播放句柄用于判断是否播放正常以及作为NET_DVR_StopRealPlay等函数的句柄参数。
添加成员变量DWORD m_fault_code;BOOL m_bIsLogin;BOOL m_bIsPlaying;STRU_DEVICE_INFO m_struDeviceInfo;并在构造函数中对其初始化m_lPlayHandle = -1;m_fault_code = 0;m_bIsLogin = FALSE;m_bIsPlaying = FALSE;7.在C***Dlg.cpp中添加全局变量char DeviceIp[13] = "192.168.1.11";char UserName[6] = "admin";char Password[10] = "xde123456";WORD DeviceIpPort = 8000;8.单按钮启动if(!m_bIsLogin){NET_DVR_DEVICEINFO_V30 DeviceInfoTmp;memset(&DeviceInfoTmp,0,sizeof(NET_DVR_DEVICEINFO_V30));LONG lLoginID = NET_DVR_Login_V30(DeviceIp , DeviceIpPort, UserName, Password,&DeviceInfoTmp);if(lLoginID == -1){CString strTemp;strTemp.LoadStringW(IDS_STRING_0_LOGIN_STATUS);MessageBox(strTemp);return;}m_bIsLogin = TRUE;m_struDeviceInfo.lLoginID = lLoginID;m_struDeviceInfo.iDeviceChanNum = DeviceInfoTmp.byChanNum;m_struDeviceInfo.iIPChanNum = DeviceInfoTmp.byIPChanNum;m_struDeviceInfo.iStartChan = DeviceInfoTmp.byStartChan;m_struDeviceInfo.iIPStartChan = DeviceInfoTmp.byStartDChan;}if(!m_bIsPlaying){NET_DVR_PREVIEWINFO ClientInfo = {0};ClientInfo.lChannel = 1;//选择预览的窗口句柄ClientInfo.hPlayWnd = GetDlgItem(IDC_0_STATIC_CAMERA)->m_hWnd;m_lPlayHandle = NET_DVR_RealPlay_V40(m_struDeviceInfo.lLoginID, &ClientInfo, NULL, NULL);//预览播放成功返回非负数,失败返回-1if(m_lPlayHandle >= 0){m_bIsPlaying = TRUE;CString strTemp;strTemp.LoadStringW(IDS_STRING_0_PLAY_BUTTON_STATUS2);GetDlgItem(IDC_0_PLAY)->SetWindowText(strTemp);this->SetTimer(Timer_Camera_Connect_Detection, 1000, NULL);}else{CString strTemp1;strTemp1.LoadStringW(IDS_STRING_0_PLAY_STATUS);CString strTemp2;m_fault_code = NET_DVR_GetLastError();strTemp2.Format(L"%d", m_fault_code);CString strTemp3;strTemp3.LoadStringW(IDS_STRING_0_PLAY_FAULT_CODE);CString strTemp4;strTemp4 = strTemp1 + L", " + strTemp3 + strTemp2;MessageBox(strTemp4);return;}}else{m_bIsPlaying = FALSE;CString strTemp;strTemp.LoadStringW(IDS_STRING_0_PLAY_BUTTON_STATUS1);GetDlgItem(IDC_0_PLAY)->SetWindowText(strTemp);NET_DVR_StopRealPlay(m_lPlayHandle);m_lPlayHandle = -1;GetDlgItem(IDC_0_STATIC_CAMERA)->Invalidate();}云台控制1.添加一个基于CButton的CPTZButton类,2.在头文件中添加以下声明#if !defined(AFX_PTZBUTTON_H__B3E99438_BBCE_4862_845F_D3AB668824A6__INCLUDED_) #define AFX_PTZBUTTON_H__B3E99438_BBCE_4862_845F_D3AB668824A6__INCLUDED_#if_MSC_VER > 1000#pragma once#endif// _MSC_VER > 1000并在头文件的结尾加上#endif3.添加成员变量int m_iSubBtnIndex; //功能按钮的索引号,添加按钮类时自动+1,用于对应相应功能添加成员函数void PTZControlAll(LONG lRealHandle,DWORD dwPTZCommand,DWORD dwStop ,int Speed); //用于实现各按钮的功能4.添加全局变量int g_iPtzBtnIndex = 0;在构造函数中对m_iSubBtnIndex进行初始化m_iSubBtnIndex = g_iPtzBtnIndex++;5.通过类向导,添加消息处理函数OnLButtonDown和OnLButtonUp;6.在PTZButton.cpp中添加***app的头文件,并添加声明#ifdef_DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif7.在按钮所在画面的类中添加两个函数,用于获得预览窗口的句柄以及云台移动的速度。
mfc实验报告

mfc实验报告MFC实验报告引言:MFC(Microsoft Foundation Class)是一种用于开发Windows桌面应用程序的框架,它提供了丰富的类库和工具,简化了Windows应用程序的开发过程。
本文将介绍我在进行MFC实验过程中的经验和收获。
一、实验背景MFC作为一种常用的开发框架,被广泛应用于Windows平台的软件开发中。
通过学习和实践MFC,可以更好地理解Windows应用程序的开发原理和方法。
二、实验目的本次实验的目的是通过开发一个简单的MFC应用程序,掌握MFC的基本使用方法和开发流程。
同时,通过实践了解MFC的一些重要概念和特性。
三、实验过程1. 环境搭建首先,需要安装Visual Studio,选择合适的版本并按照提示进行安装。
安装完成后,打开Visual Studio,创建一个新的MFC应用程序项目。
2. 界面设计在MFC应用程序中,界面设计是一个重要的环节。
通过使用Visual Studio提供的可视化设计工具,我们可以方便地创建和布局界面元素,如按钮、文本框等。
3. 事件处理在MFC应用程序中,用户的操作往往会触发一些事件,如点击按钮、输入文本等。
我们需要编写相应的事件处理函数,来响应这些事件并执行相应的操作。
在实验中,我学会了如何编写事件处理函数,并与界面元素进行关联。
4. 数据处理在实际应用中,数据的处理是不可或缺的一部分。
通过学习MFC,我了解到如何在应用程序中进行数据的输入、输出和处理。
MFC提供了丰富的类库和接口,可以方便地进行数据操作。
5. 调试与测试在开发过程中,调试和测试是必不可少的环节。
通过使用Visual Studio提供的调试工具,我学会了如何定位和修复程序中的错误,并进行功能测试和性能测试。
四、实验结果经过一段时间的学习和实践,我成功地开发了一个简单的MFC应用程序。
该程序可以实现基本的界面显示和数据处理功能。
通过实验,我对MFC的使用有了更深入的了解,并且掌握了一些常用的开发技巧和方法。
MFC学习心得

有六个基本的控制:CStatic、CButton、CEdit、CList、CComboBox和CScrollBar。
你需要理解的是那个控制能做些什么、你应该如何控制它的外表和行为以及如何让控制能响应用户事件。
void CHelloView::OnDraw(CDC* pDC)
{
CHelloDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CString str("Hello,World!");
创建一个静态控件分两步。首先,调用构造函数来构造此CStatic对象,然后调用Create成员函数来创建此静态控件并将它与该CStatic对象连接。如果你是在一个对话框中创建了一个静态控件(通过一个对话框资源),则当用户关闭这个对话框时,此CStatic对象被自动销毁。如果你是在一个窗口中创建了一个CStatic对象,则必须由你来销毁它。在一个窗口的堆栈中创建的CStatic对象将自动被销毁。如果你是使用new函数在堆中创建CStatic对象,则当你使用完后,必须调用delete来销毁这个CStatic对象。
SS_BLACKRECT 该控制以填充的矩形显示。颜色与当前的窗口框架相同。
SS_CENTER 文本居中。
SS_GRAYFRAME 控制以矩形边框方式显示。颜色与当前桌面相同。
SS_GRAYRECT 该控制以填充的矩形显示。颜色与当前的桌面相同。
SS_ICON 控制以图标形式显示。文本作为图标在资源文件的名称。rect参数只控制位
c语言学习心得c语言程序设计心得2c语言程序设计课程设计心得体会(7篇)
c语言学习心得c语言程序设计心得2c语言程序设计课程设计心得体会(7篇)推举c语言学习心得c语言程序设计心得2(推举)一由于是英文版,所以读起来很流畅,丝毫没有中文翻译书籍蹩脚的感觉。
下面说说我读这本书的感受,和我个人对c#的一点看法。
这本书是一本入门书籍,读这本书根本不需要什么根底学问,对编程一点都不懂的人也可以看,适合入门用。
但假如有肯定的编程根底,特殊是面对对象,或以前具有window native编程阅历,或web编程阅历,sql server阅历,读起来就很快,我用了一个星期的时间,便读完了,将书中的练习都在自己的机器上实现了一遍。
对书中的内容不能说100%,至少90%都有了肯定的了解。
下面说一下我之前的阅历:由于我之前有肯定的c语言编程阅历(谭浩强的c语言那本书,全部题目都拿下)c++阅历(c++primer把握大局部内容,并把握了c++的高级内容,比方模板库,泛型编程,抽象类,虚函数,多重继承,自己实现过一些简单的类,比方大数类,计算1万的阶乘等)肯定的算法和编程阅历(学习了简洁的算法,在oj上ac过肯定数量的题目(约100多题))java阅历(约一个月,主要通过视频教学学习了一些内容)web编程阅历(了解html, css, xml ,ajax,php,tomcat,可以写一些简洁的php页面,jsp页面等)访问数据库(了解sql语言(特地看完了《head first sql》英文版,对于高级查询,合并查询等比拟高级的sql内容有肯定的了解) 有一些vc阅历(编写过简洁的图像处理程序,变色,腐蚀,膨胀算法),对mfc的框架初步了解。
win32 阅历(可以直接调用win32 sdk写一些简洁的程序) 肯定的英文阅历(cet6,读过一些英文原版的技术书籍和文献)之前对c#有肯定的了解,用c#写过一些win form。
之所以总结自己的阅历,是由于有人可能不信任我能一个星期读完这本厚厚的英文技术书籍,并完成里面的练习。
MFC 对话框编程 -- 总结
MFC 对话框编程 -- 总结一、创建对话框对象1.首先利用资源编辑器创建对话框资源,并针对该对话框资源定义一个对话框类:class CTestDlg : public CDialog2.创建话话框对象模态对话框的创建:如:CTestDlg dlg;dlg.DoModal();非模态对话框创建:如:CTestDlg dlg;dlg.Create(IDD_DIALOG, this);但这样是得不到一个正常显示的非模态对话框的。
因为模态与非模态对话框的实现方式并不相同,这里我们还要注意几点。
非模态对话框创建完成后是隐藏着的,必须调用ShowWindow来进行显示。
对于模态对话框,当执行到DoModal 函数以创建对话框时,程序会暂停执行,直至模态对话框关闭。
所以创建模态对话框可以采用局部对象。
但是,对于非模态对话框,当执行Create函数时并不会暂停执行,当执行到大括号"}后Dlg局部对象被销毁生命周期结束,于是异常出现了。
解决方法有两个:一、在View类中定义一个CTestDlg 成员变量。
二、动态创建一个CTestDlg 变量,并重写CTestDlg 类的 PostNcDestroy函数,在该函数里销毁对象 delete this;无论创建的是模态对话框,还是非模态对话框,当我们单击确定或取消按钮后对话框都会消失。
但这时低层的操作却是不同的。
对于模态对话框,此时对话框对象的确是被销毁了,但对于非模态对话框,这时只是隐藏起来不再显示。
这需要我们自己调用DestoryWindow函数来进行销毁工作。
这时我们必须重写 CTestDlg 的 OnOK 、 OnCancel 两个函数(这两个是基类CDialog的虚函数),在这两个函数内调用DestroyWindow函数,并注意不再调用基类CDialog相应的函数。
正确地创建非模态对话框的代码如下:CTestDlg *pDlg = new CTestDlg;pDlg->Create(IDD_DIALOG, this);pDlg->ShowWindow(SW_SHOW);同时,在CTestDlg 类的 PostNcDestroy函数中销毁对象:delete this;二、动态创建按钮1. 在对话框类CTestDlg 中定义一个 CButton 类对象,作为其成员变量。
MFC开发常用知识点总结
开辟空间cmd_zone=newchar[CMD_LENGH];//指令空间data_zone=newchar[DATA_LENGH];//数据空间ax=newchar[4];bx=newchar[4];cx=newchar[4];sp=newchar[SP_LENGH];//堆栈空间pc=newchar[4];memset(cmd_zone,0,CMD_LENGH);//设置大小memset(data_zone,0,DATA_LENGH);memset(ax,0,4);memset(bx,0,4);memset(cx,0,4);memset(sp,0,SP_LENGH);memset(pc,0,4);srand((unsignedint)(time(0)));//随机数起始分配地址(16位:2,2,4,4,4)cmd_code=*((unsignedshort*)cmd_zone);cmd_nouse=*((unsignedshort*)cmd_zone+2);cmd_arg1=*(unsignedint *)(cmd_zone+4);cmd_arg2=*(unsignedint *)(cmd_zone+8);cmd_arg3=*(unsignedint*)(cmd_zone+12);输出数据(EDITCONTROL)CString bbb;bbb.Format(_T("%d %d %d %d %d"),X,X,X,X,X);UpdateData(true);myedit += bbb + _T("\r\n");UpdateData(false);动态创建按钮static CButton *btn =new CButton();btn->Create(_T("aaa"),WS_CHILD|WS_VISIBLE,CRect(10,50,100,100),this,1); //(按钮的文字,Dword,对角线顶点坐标,父窗口,号码)CMFCButton * button = new CMFCButton;button->Create(_T("Test Button"),WS_VISIBLE,CRect(5, 5, 80, 50),this,IDC_BUTTON_TEST);// 更改文字button->SetWindowTextA(_T("强制更改"));// 更改背景颜色button->SetFaceColor(RGB(153, 217, 234));// 更改字体颜色button->SetTextColor(RGB(255, 255, 255));// 更改高亮颜色button->SetTextHotColor(RGB(63, 72, 204));// 更改位置button->MoveWindow(50, 50, 100, 70);// 鼠标经过时变成手势button->SetMouseCursorHand();// 工具提示button->SetTooltip(_T("俺是提示"));button1->SetImage(IDB_BITMAP1);向数据空间写数据for (int i=0;i<DATA_LENGTH/16-1;i++){cmd_code=*(unsignedshort*)(cmd_zone+0+16*i)=rand()%10;cmd_nouse=*(unsignedshort*)(cmd_zone+2+16*i)=rand()%10;cmd_arg1=*(unsignedint*)(cmd_zone+4+16*i)=rand()%10;cmd_arg2=*(unsignedint*)(cmd_zone+8+16*i)=rand()%10;cmd_arg3=*(unsignedint*)(cmd_zone+12+16*i)=rand()%10;}Comob 控件mycomb1.AddString(“aaa”);mycomb1.GetLBText(mycomb1.GetCurSel(),bbb); //获取控件指示的内容(如:add,sub,div等)mycomb1.GetCurSel() //获取控件指示的第N个数,返回值为(0,1,2…)定时器SetTimer(1,1000,NULL);//定时器1,1000ms间隔,NULL显示菜单程序:放在oninit()函数下HMENU m_hMenu1;m_hMenu1=LoadMenu(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MENU1));//导入资源,创建菜单::SetMenu(this->GetSafeHwnd(),m_hMenu1);//添加到对话框判断数据库是否存在,不存在就还原备份CFile abc;if (!abc.Open(_T(".\\test1.mdb"),CFile::modeRead)){CopyFile(_T(".\\test1.bak"),_T(".\\test1.mdb"),TRUE);}Edit control控件跟踪最后一行显示方法,放在updatedata(false)之后m_editcontrol.LineScroll(m_editcontrol.GetLineCount());设置进度条m_ctrl.SetRange(0,100); //设置起始和结束范围m_ctrl.SetPos(100); //设置当前位置打开帮助文档::WinExec("HH.EXE .\\help.chm",SW_SHOW);获取clistbox内容CString str;m_lstMaterials.GetText(m_lstMaterials.GetCurSEL,str);CString componentname=str;CString aaa;aaa.Format(_T("%s"),componentname);AfxMessageBox(aaa);显示图片void CDlgComponents::OpenBMP(){CFile picFile;if(picFile.Open(BmpName, CFile::modeRead | CFile::typeBinary)) {BYTE* pBuffer = new BYTE[(unsignedint)picFile.GetLength()];if(pBuffer != NULL){picFile.Read(pBuffer, (UINT)picFile.GetLength());//Load the Imagem_picCtrl.Load(pBuffer, (size_t)picFile.GetLength());delete pBuffer;}}}获取路径void CDlgComponents::GetBMPName(){POSITION pos = m_Components.GetFirstSelectedItemPosition();int iSel = m_Components.GetNextSelectedItem(pos);CString strSel = m_Components.GetItemText(iSel, 0); //获取到组件名称CString comid;int len;len=strSel.GetLength();int i;i=strSel.Find(" ");comid=strSel.Mid(i+5,len);BmpName=".//piclib/"+comid+".bmp";}。
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. void CDlgSysF9::DoDataExchange(CDataExchange* pDX){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);3.按钮button弹出对话框的代码CDlgSysF9AdjOrigin SysF9AdjOringin; //类名定义一个变量SysF9AdjOringin.DoModal();//弹窗操作记得包含CDlgSysF9AdjOrigin的头文件4.画刷的使用,改变字体颜色和背景颜色【字体颜色、字体的背景颜色、大背景颜色】CBrush m_brush;记得初始化画刷m_brush.CreateSolidBrush(RGB(128,128,128));if(pWnd->GetDlgCtrlID()==IDC_STC_ROLL){pDC->SetTextColor(RGB(0,0,0));// 设置字的颜色pDC->SetBkColor(RGB(128,128,128));// 设置背景颜色hbr=m_brush;}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);7.设置对话框中某一控件中现实的文本SetDlgItemText(IDC_EDIT_HPOSITION,L"0.000");8.设置一个控件disableGetDlgItem(IDC_CHECK_MANUAL)->EnableWindow(FALSE);9.隐藏或显示控件m_check_auto.ShowWindow(SW_HIDE);m_check_auto.ShowWindow(SW_SHOW);10.button上添加iconCButtonST 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 123CRect rect1;CRect rect2;CRect rect3;GetDlgItem(IDC_STATIC_FIRST)->GetWindowRect(&rect1);ScreenToClient(rect1);if(rect1.PtInRect(point)){CBitmap bitmap;bitmap.LoadBitmap(IDB_BMP_WHITE);((CStatic*)GetDlgItem(IDC_STATIC_FIRST))->SetBitmap(static_cast<HBITMAP >( bitmap.Detach()));bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_SECOND))->SetBitmap(static_cast<HBITMAP >( bitmap.Detach()));bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_THIRD))->SetBitmap(static_cast<HBITMAP >( bitmap.Detach()));m_combox_station.SetCurSel(0);}GetDlgItem(IDC_STATIC_SECOND)->GetWindowRect(&rect2);ScreenToClient(rect2);if(rect2.PtInRect(point)){CBitmap bitmap;bitmap.LoadBitmap(IDB_BMP_WHITE);((CStatic*)GetDlgItem(IDC_STATIC_SECOND))->SetBitmap(static_cast< HBITMAP >( bitmap.Detach()));bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_FIRST))->SetBitmap(static_cast< HBITMAP >( bitmap.Detach()));bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_THIRD))->SetBitmap(static_cast< HBITMAP >( bitmap.Detach()));m_combox_station.SetCurSel(1);}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< HBITMAP >( bitmap.Detach()));bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_FIRST))->SetBitmap(static_cast< HBITMAP >( bitmap.Detach()));bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_SECOND))->SetBitmap(static_cast< HBITMAP >( bitmap.Detach()));m_combox_station.SetCurSel(2);}//comboxCDialogEx::OnLButtonDown(nFlags, point);}void CDlgSysF9Conveyor::OnLButtonUp(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCRect rect1;CRect rect2;CRect rect3;switch(m_flag){case Flg2:{// when btn down on 123,select which rectangle is show on 123GetDlgItem(IDC_STATIC_FIRST)->GetWindowRect(&rect1);ScreenToClient(rect1);if(rect1.PtInRect(point)){CBitmap bitmap;bitmap.LoadBitmap(IDB_BMP_WHITE);((CStatic*)GetDlgItem(IDC_STATIC_FIRST))->SetBitmap(static_cast< HBITMAP >( bitmap.Detach()));bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_SECOND))->SetBitmap(static_cast< HBITMAP >( bitmap.Detach()));bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_THIRD))->SetBitmap(static_cast< HBITMAP >( bitmap.Detach()));}GetDlgItem(IDC_STATIC_SECOND)->GetWindowRect(&rect2);ScreenToClient(rect2);if(rect2.PtInRect(point)){CBitmap bitmap;bitmap.LoadBitmap(IDB_BMP_WHITE);((CStatic*)GetDlgItem(IDC_STATIC_SECOND))->SetBitmap(static_cast< HBITMAP >( bitmap.Detach()));bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_FIRST))->SetBitmap(static_cast< HBITMAP >( bitmap.Detach()));bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_THIRD))->SetBitmap(static_cast< HBITMAP >( bitmap.Detach()));}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< HBITMAP >( bitmap.Detach()));bitmap.LoadBitmap(IDB_BMP_BLACK);((CStatic*)GetDlgItem(IDC_STATIC_FIRST))->SetBitmap(static_cast< 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 the screen.//m_startRect=false;CDialogEx::OnLButtonUp(nFlags, point);}16.list control中获得选中的位置索引//获得list control被选中的列的索引void CDlgSysF9CameraZroffset::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult) {LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(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;case 2:GetDlgItem(IDC_BTN_TEST_ZOFFSET)->EnableWindow(FALSE);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 访问标号的访问范围。