精华内容
下载资源
问答
  • MFC对话框复制

    2011-08-11 16:24:44
    在工程中导入已建好的对话框,方法有三: 法一: 1、首先要生成一个*.ogx的文件。  方法:打开包含有所要加的对话框资源的工程(别的工程)。  在试图资源(ClassView)中鼠标右键点击所需的对话框的类...
     
    

    在工程中导入已建好的对话框,方法有三:

    法一:

    1、首先要生成一个*.ogx的文件。

       方法:打开包含有所要加的对话框资源的工程(别的工程)。
             在试图资源(ClassView)中鼠标右键点击所需的对话框的类(也可以是所需的类)
             这时,你会看到右键菜单中有个“Add to Gallery”的选项。

             选择这个选项,则*.ogx文件生成。
             生成的文件名会类似你的对话框的类名,只不过中间会多出的空格(这无关紧要)
             
             关键是此文件生成在什么地方
             一般情况下是:
             C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Gallery
             \别的工程名  目录下

    2010-8-5:今天在vc2003中想使用此方法,结果出现无法将文件.ogx插入到工具箱,没有被识别为com工具箱。而且在.net中也没有“Add to Gallery”选项,看来此方法只适用于vc6.0

    2、接着就是Insert这个*.ogx的文件。
       也就是Insert这个对话框资源和这个对话框类

       打开所要加入的工程,选择
       Project->Add To Project->components and controls...
       这时打开的是一个对话框,默认的打开目录就是:
       C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Gallery
       在对话框中选择进入“别的工程名”的目录,你就会看到那个  *.ogx的文件,
       选择它,然后Insert.  最后关闭对话框。

       这时你就会看到那个对话框的类已经出现在你的工程中,
       再到资源ResourceView中的Dialog中看看吧,那个对话框的资源已经出现。

    法二:

    在要导入对话框的工程中创建一个对话框,然后搜索对应的ID,将ID号对应位置处的内容改为要导入的对话框的内容(用文本方式打开rc文件),对应各个控件的对应消息号要一致(在Resource.h文件中),最后要将对话框类的cpp和h文件添加进来,要修改的只有#include "(动态库文件.h)"。

    说明:

    设计对话框界面是在rc文件中,rc文件可以以文本形式打开进行修改(即法二中用到的)。打开的方法是File-->Open,在Open对话框中Open as选择Text,然后选中rc文件打开即可。

    或者使用法二中提到的搜索资源ID的方法,找到对应rc文件里的代码,双击即可进入。

    2010-8-5:

    法三:把你原来的工程插入到当前工程中(文件-》添加项目-》现有项目),然后拷贝原来的对话框,再到当前工程对话框组,粘贴!然后把对应的h和cpp文件复制过去即可。  

    此方法太棒了!

    展开全文
  • VC++ MFC 对话框 ,编辑框 按钮 实现文件打开和复制文件功能
  • soildworks模型导入MFC对话框

    千次阅读 2016-01-06 14:57:13
    基于openGL 导入OBJ模型到MFC对话框,可以显示纹理,缩放

    最近项目需要把solidworks创建的设备模型导入MFC对话框中显示,并且能鼠标控制移动、缩放。

    软件平台包括 solidworks 2008 、3DS-Max 7.0 、 vs 2008 sp1;

    openGL配置

    提供最全的openGL库,支持鼠标滚轮,配置方法


    将下载的压缩包解开,将得到5个文件(glut.dll, glut32.dll, glut.lib, glut32.lib,glut.h)
    (1)把glut.h复制到x:\Program Files\Microsoft\Visual Studio 10.0\VC\include\gl文件夹中,如果没有gl这个文件夹则可以自己新建一个。(x是你安装VS的盘符号)
    (2)把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(即与include并排的lib文件夹下)。
    (3)把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为:C:\Windows\System32)
    (注:如在开发应用程序时用到OpenGL辅助库函数,则还需下载相应动态链接库,包含glaux.dll, glaux.lib, glaux.h,相应步骤同上)


    在Visual C++中先右击项目,选择属性,找到连接器标签,最后在输入中的附加依赖库加上opengl32.lib glut32.lib glu32.lib.

    3 #include<gl/glut.h>
     4 
     5 //#include<gl/glu.h>  //glut.h自动包含了glu.h 和 gl.h
     6 
     7 //#include<gl/gl.h>


    点击打开链接

    1.在solildworks中创建设备模型,编辑好纹理,这里为了方便直接为模型上的颜色,没有进行贴图(关于soildworks的使用可另外参考教程)

    2.保存模型文件为 .wtl格式

    3.在3DS-Max 7.0中导入上面的.wtl文件,然后导出文件为.OBJ格式,同时导出素材库即.mtl格式文件。


    4.导入模型到MFC对话框

    创建一个MFC对话框在OnInitDialog()中设置RC;

    	hrenderDC=::GetDC(this->m_hWnd);
    	if(SetWindowPixelFormat(hrenderDC)==FALSE)// 设置像素格式
    		return ;
    
    	if(CreateViewGLContext(hrenderDC)==FALSE)//创建RC并选为所用
    		return ;
    SetWindowPixelFormat( HDC hDC )
    {
    PIXELFORMATDESCRIPTOR pixelDesc;
    
    	pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);
    	pixelDesc.nVersion = 1;
    
    	pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW | 
    		PFD_SUPPORT_OPENGL |
    		PFD_DOUBLEBUFFER |
    		PFD_TYPE_RGBA;
    
    	pixelDesc.iPixelType = PFD_TYPE_RGBA;
    	pixelDesc.cColorBits = 32;
    	pixelDesc.cRedBits = 0;
    	pixelDesc.cRedShift = 0;
    	pixelDesc.cGreenBits = 0;
    	pixelDesc.cGreenShift = 0;
    	pixelDesc.cBlueBits = 0;
    	pixelDesc.cBlueShift = 0;
    	pixelDesc.cAlphaBits = 0;
    	pixelDesc.cAlphaShift = 0;
    	pixelDesc.cAccumBits = 0;
    	pixelDesc.cAccumRedBits = 0;
    	pixelDesc.cAccumGreenBits = 0;
    	pixelDesc.cAccumBlueBits = 0;
    	pixelDesc.cAccumAlphaBits = 0;
    	pixelDesc.cDepthBits = 0;
    	pixelDesc.cStencilBits = 1;
    	pixelDesc.cAuxBuffers = 0;
    	pixelDesc.iLayerType = PFD_MAIN_PLANE;
    	pixelDesc.bReserved = 0;
    	pixelDesc.dwLayerMask = 0;
    	pixelDesc.dwVisibleMask = 0;
    	pixelDesc.dwDamageMask = 0;
    
    	PixelFormat = ChoosePixelFormat(hDC,&pixelDesc);
    	if(PixelFormat==0) // Choose default
    	{
    		PixelFormat = 1;
    		if(DescribePixelFormat(hDC,PixelFormat,
    			sizeof(PIXELFORMATDESCRIPTOR),&pixelDesc)==0)
    		{
    			return FALSE;
    		}
    	}
    
    	if(SetPixelFormat(hDC,PixelFormat,&pixelDesc)==FALSE)
    
    	{ 
    		return FALSE;
    	}
    
    	return TRUE;
    }

    	hrenderRC = wglCreateContext(hDC);
    
    	if(hrenderRC==NULL)
    		return FALSE;
    
    	if(wglMakeCurrent(hDC,hrenderRC)==FALSE)
    		return FALSE;
    
    
    
    	
    随后初始化openGL配置

    	glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_STENCIL);
    
    	CRect clirc;
    	GetClientRect(&clirc);
    
    	window_width = clirc.Width();
    	window_height = clirc.Height();
    
    	glPolygonMode(GL_FRONT,GL_FILL);
    	glPolygonMode(GL_BACK,GL_FILL);
    
    	glClearColor(0.0, 0.0, 0.0, 0.0);
    
    	//设置当前操作的矩阵为“模型”视图矩阵
    	glMatrixMode(GL_PROJECTION);
    
    	//把当前矩阵设置为单位矩阵
    	glLoadIdentity();
    
    	//将当前控件设置为透视投影空间
    	gluPerspective(45.0f, (float)window_width/(float)window_height, 0.1f, 100.0f);
    
     	glMatrixMode(GL_MODELVIEW);
    
    	glClearColor(0, 0, 0, 1);
    	glClearDepth(1.0f); 
    	//把屏幕上的颜色清空
    	glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
    
    	//启动深度测试
    	glEnable(GL_DEPTH_TEST);
    
    	glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do 用于指定深度缓冲比较值。
    
    	//
    	glEnable(GL_NORMALIZE);
    
    	//启动剔除功能
    	glEnable(GL_CULL_FACE);
    
    	glEnableClientState(GL_VERTEX_ARRAY);
    	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    
    	// Setup other misc features.
    
    	//打开光照功能
    	glEnable( GL_LIGHTING );
    	glEnable( GL_NORMALIZE );
    
    	//设置颜色填充方式:GL_SMOOTH:平滑方式   GL_FLAT:单色方式
    	glShadeModel( GL_SMOOTH );
    
    
    	//glViewport(0,0,clirc.Width(),clirc.Height());
    
    	// Setup lighting model.
    	GLfloat light_model_ambient[] = {1.0f, 1.0f, 1.0f, 1.0f};
    	GLfloat light0_diffuse[] = {1.0f, 1.0f, 1.0f, 1.0f};
    	GLfloat light0_direction[] = {0.0f, 0.0f, 10.0f, 0.0f};
    	GLfloat light_specular[] = {1.0f, 1.0f, 1.0f, 1.0f};
    
    	//	GL_LIGHT0  0号光源,以此类推
    
    
    	// 光源位置由四个值表示(X,Y,Z,W)如果第四个值W为零,则表示该光源位于无限远处,
    	//前三个值表示了它所在的方向。这种光源称为方向性光源,通常,太阳可以近似的被认为是方向性光源。
    	//如果第四个值W不为零,则X/W, Y/W, Z/W表示了光源的位置。这种光源称为位置性光源。对于位置性光源,
    	//设置其位置与设置多边形顶点的方式相似,各种矩阵变换函数例如:glTranslate*、glRotate*等在这里也同样有效。
    	//方向性光源在计算时比位置性光源快了不少,因此,在视觉效果允许的情况下,应该尽可能的使用方向性光源。
    	glLightfv(GL_LIGHT0, GL_POSITION, light0_direction);
    
    
    	//GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR属性。这三个属性表示了光源所发出的光的反射特性(以及颜色)。
    	//每个属性由四个值表示,分别代表了颜色的R, G, B, A值。GL_AMBIENT表示该光源所发出的光,经过非常多次的反射后,最终遗留在整个光照环境中的强度(颜色)。
    	//GL_DIFFUSE表示该光源所发出的光,照射到粗糙表面时经过漫反射,所得到的光的强度(颜色)。
    	//GL_SPECULAR表示该光源所发出的光,照射到光滑表面时经过镜面反射,所得到的光的强度(颜色)。
    	glLightfv(GL_LIGHT0, GL_AMBIENT, light_model_ambient);
    	glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);
    	glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    	glEnable( GL_LIGHT0 );
    
    然后读取模型文件

    	// Center of the model
    	float modelCenter[] = {0.0f, 0.0f, 0.0f};
    
    	if ( pModel )
    	{
    		glmDelete( pModel );
    		pModel = NULL;
    	}
    
    	CString FileName;
    	FileName = CommonFunction::GetApplicationPath() + _T("ESR.obj");
    
    
    	//声明标识符   
    	USES_CONVERSION ;
    	char * pFileName = T2A(FileName); 
    
    
    	// Load the new obj model
    	pModel = glmReadOBJ( pFileName);
    
    	// Generate normal for the model
    	glmFacetNormals( pModel );
    
    	// Scale the model to fit the screen
    	glmUnitize( pModel, modelCenter );
    
    	// Init the modelview matrix as an identity matrix
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    	glGetDoublev( GL_MODELVIEW_MATRIX, pModelViewMatrix );	

    绘制场景及模型

    	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    
    	glTranslated( 0.0, 0.0, -5.0 );
    	glMultMatrixd( pModelViewMatrix );
    
    	if ( pModel )
    	{
    		glmDraw( pModel, GLM_FLAT|GLM_MATERIAL );
    	}

    窗口改变大小时候重绘模型
    OnSize(UINT nType, int cx, int cy)
    {
    	CDialog::OnSize(nType, cx, cy);
    
    	window_width  = cx;
    	window_height = cy;
    
    	// Reset the viewport
    	//把像素绘制到窗口的哪个区域,前两个参数定义了视口的左下脚(0,0表示最左下方),后两个参数分别是宽度和高度
    	glViewport(0, 0, window_width, window_height);
    
    	//使用glMatrixMode来指定当前操作的究竟是模型视图矩阵还是投影矩阵。
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    
    	//为了得到透视效果,我们使用gluPerspective来设置可视空间。假定可视角为60度(如果调试时发现该角度不合适,可修改之。我在最后选择的数值是75。),
    	//高宽比为1.0。最近可视距离为1.0,最远可视距离为200000000*2=400000000。即:gluPerspective(60, 1, 1, 400000000);
    	gluPerspective(45.0f, (float)window_width/(float)window_height, 0.01f, 200.0f);
    }
    鼠标操作

    OnLButtonDown(UINT nFlags, CPoint point)
    {
    	// TODO: 在此添加消息处理程序代码和/或调用默认值
    	OldX = point.x;
    	OldY = point.y;
    	bLeftBntDown = true;
    	CDialog::OnLButtonDown(nFlags, point);
    }
    OnLButtonUp(UINT nFlags, CPoint point)
    {
    	// TODO: 在此添加消息处理程序代码和/或调用默认值
    	bLeftBntDown = false;
    	CDialog::OnLButtonUp(nFlags, point);
    }
    OnMouseMove(UINT nFlags, CPoint point)
    {
    	// TODO: 在此添加消息处理程序代码和/或调用默认值
    
    	if ( bLeftBntDown && pModel )
    	{
    		float fOldX =  2.0f*OldX/(float)window_width  - 1.0f;
    		float fOldY = -2.0f*OldY/(float)window_height + 1.0f;
    		float fNewX =  2.0f*point.x/(float)window_width  - 1.0f;
    		float fNewY = -2.0f*point.y/(float)window_height + 1.0f;
    
    		double pMatrix[16];
    		trackball_opengl_matrix( pMatrix, fOldX, fOldY, fNewX, fNewY);
    
    		glMatrixMode( GL_MODELVIEW );
    		glLoadIdentity();
    		glLoadMatrixd( pMatrix );
    		glMultMatrixd( pModelViewMatrix );
    		glGetDoublev( GL_MODELVIEW_MATRIX, pModelViewMatrix );
    
    		OldX = point.x;
    		OldY = point.y;
    	}
    	CDialog::OnMouseMove(nFlags, point);
    }

    滚轮操作

    OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
    {
    	// TODO: 在此添加消息处理程序代码和/或调用默认值
    
    	if (zDelta > 0)
    	{
    		glMatrixMode( GL_MODELVIEW );
    		glLoadIdentity();
    		glLoadMatrixd( pModelViewMatrix );
    		glScaled( 1.05, 1.05, 1.05 );
    		glGetDoublev( GL_MODELVIEW_MATRIX, pModelViewMatrix );
    	}
    	if (zDelta < 0)
    	{
    		glMatrixMode( GL_MODELVIEW );
    		glLoadIdentity();
    		glLoadMatrixd( pModelViewMatrix );
    		glScaled( 0.95, 0.95, 0.95 );
    		glGetDoublev( GL_MODELVIEW_MATRIX, pModelViewMatrix );
    	}
    	return CDialog::OnMouseWheel(nFlags, zDelta, pt);
    }

    源码 源码

    展开全文
  • MFC对话框自定义消息映射的方法

    千次阅读 2018-06-01 15:57:43
    MFC对话框自定义消息映射的方法本文实例讲述了MFC对话框自定义消息映射的方法。分享给大家供大家参考。具体实现方法如下:1、定义消息:复制代码代码如下:#define WM_MYMSG (WM_USER+100)2、定义消息响应函数:...

    MFC对话框自定义消息映射的方法

    本文实例讲述了MFC对话框自定义消息映射的方法。分享给大家供大家参考。具体实现方法如下:

    1、定义消息:

    复制代码代码如下:
    #define WM_MYMSG (WM_USER+100)

    2、定义消息响应函数:

    LPESULT CSLYARDlg::OnMymsg(WPARAM wParam, LPARAM lParam)
    {
    // TODO
    return 0;
    }
    
    

    3、在窗口类头文件的AFX_MSG中声明消息响应函数:

    // Generated message map functions
    //{{AFX_MSG(CSLYARDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    afx_msg LRESULT OnMymsg(WPARAM wParam, LPARAM lParam);
    //}}AFX_MSG
    
    

    4、在窗口类实现文件的MESSAGE_MAP中声明消息映射,这里需要用到ON_MESSAGE宏:

    BEGIN_MESSAGE_MAP(CSLYARDlg, CDialog)
    //{{AFX_MSG_MAP(CSLYARDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_MESSAGE(WM_MYMSG, OnMymsg)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    展开全文
  • MFC对话框右键菜单

    2016-05-27 16:15:08
    该源码实现了为对话框添加右键菜单的功能,使用C++编码,在VC6.0下可以直接编译和运行。
  • 因最近研究工作要用到MFC,故再次重温了孙鑫老师的MFC对话框编程,因所用的编译软件为VS2008,与视频中孙老师使用的VC++6.0有很大出入,造成很大不便,我通过各方查找,实现了VS2008相对应于VC++6.0的方法。...

          因最近研究工作要用到MFC,故再次重温了孙鑫老师的MFC对话框编程,因所用的编译软件为VS2008,与视频中孙老师使用的VC++6.0有很大出入,造成很大不便,我通过各方查找,实现了VS2008相对应于VC++6.0的方法。现将对话框编程整个视频的详细内容分享如下,希望对有缘看到的朋友提供方便。笔者水平有限,难免有不足之处,欢迎批评指正。

    一.准备工作

    1.创建一个MFC Application.

    File->New->Project->Visual C++->MFC->MFC Application.输入项目名称Menu后,点击NEXT,Application type->Single document.建议取消勾选下方的Use Unicode libraries,不然有时候会出错。然后直接点Finish。完成MFC程序创建过程。

    2.新建对话框

          点击Resource View(资源视图)->Dialog,右键添加资源->选择对话框->新建,控件ID为IDD_DIALOG1。

        我们会看到,程序刚建好时资源视图对话框中已有IDD_ABOUTBOX,这个是版本信息提示对话框,程序中点击帮助可查看。

    点击类视图,对话框资源对应的类:CObject->CCmdTarget->CWnd->CDialog

    一个概念:模态对话框和非模态对话框,模态对话框显示时不能执行程序其它任务,而非模态对此无限制。

    3.新建一个和对话框相关的类

    左键资源视图中刚创建的对话框资源,右键右面的对话框,Add Class->Class Name->CTestDlg,MFC中前缀C代表类。

    这样,我们就得到一个新类---CTestDlg,此类就是与刚创建的对话框相对应的,我们对对话框的操作可以在这里进行。

    两个重要函数:

    构造函数:调用基类CDialog的构造函数,IDD为对话框资源的ID

    CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
    
    : CDialog(CTestDlg::IDD, pParent)
    
    { 
    
    }
    
    CTestDlg::DoDataExchange(),此函数主要用来对话框数据交换和数据校验
    
    void CTestDlg::DoDataExchange(CDataExchange* pDX)
    
    {
    
    CDialog::DoDataExchange(pDX);
    
    }
    View Code

     

    4.创建对话框操作

      在Menu菜单中增加菜单项”Dialog”,属性设置为PopUp

    在该菜单项添加消息响应函数:

    Message Type:COMMAND,Class List:CmenuView

     

    二.对话框操作

     

    1.模态对话框与非模态对话框

       (1)模态对话框

    模态对话框的创建函数:CDialog::DoModal()

       模态对话框的关闭函数:CDialog::EndDialog()

    #注意:View类中并不知道CTestDlg类型,要包涵头文件”TestDlg.h”,创建过程在View类的OnDialog()函数中。

    void CmenuView::OnDialog()
    
    {
    
    // TODO: Add your command handler code here
    
    CTestDlg dlg;
    
    dlg.DoModal();//对话框出现就不能在操作其他,除非先关闭它
    
    }
    View Code

     

    (2)非模态对话框

    非模态对话框的创建函数:BOOL  CDialog::Create(ID号,父窗口指针);

    若父窗口指针设为NULL,对话框父窗口就被设置为主应用程序窗口(此应用中为框架窗口)。

     

    CtestDlg dlg;

    dlg.Create(IDD_DIALOG1,this);

     

    #注意:

    对于非模态对话框必须调用ShowWindow();而模态创建函数本身有显示功能  dlg.ShowWindow(SW_SHOW);

    非模态对话框不能是局部变量,而模态因为要暂停,程序停止执行,停留在其生命周期内,所以可以是局部变量

    非模态也可以是局部变量两种方案:

    a.定义Dlg类型的成员变量   

    b.定义指针,在堆上分配内存

    CTestDlg *pDlg=new CTestDlg();

    Dlg->Create(IDD_DIALOG1,this);

    pDlg->ShowWindow(SW_SHOW);

    //这种方法不能解决内存释放重利用问题,最好是添加成员变量,再用析构函数delete释放

     

    #注意:

    对于模态对话框,点击OK后窗口被销毁,而非模板对话框没被销毁而是隐藏了。

    非模态对话框点击OK时,由基类中OnOK虚函数响应,只隐藏不销毁。

    好的方法是类中要覆盖基类的OnOK()在其内部调用DestroyWindow()销毁。

    所以,之后示例中我们都使用模态对话框。

     

    2.关于对话框的操作

    (1)Task:在对话框上添加一个按钮,点击该按钮再动态创建一个按钮

    VS2008切换到资源视图,工具栏直接拖动添加名称是Add的按钮。为这个按钮添加消息响应函数,按钮的点击属于通告消息:

    右键按钮选择“Add Event Handler”,MessageType:BN_CLICKED,ClassList:CTestDlg。

    对CTestDlg类添加成员变量  private:  CButton   m_btn;

    void CTestDlg::OnBnClickedBtnAdd()
    
    {
    
    // TODO: Add your control notification handler code here
    
    m_btn.Create(“WW”,BS_DEFPUSHBUTTON|WS_VISIBLE|WS_CHILD,
    
                CRect(0,0,100,100),this,123);
    
    )//MSDN中查找Button类型,加了WS_VISIBLE就不用调用ShowWindow了,
    
     //否则必须调用,第三个参数是Button空间矩形区域大小,四是控件父窗口,
    
     //五是ID号
    
    }
    View Code

     

    #注意:

    我们发现当我们两次点击Add按钮时,非法操作。因为m_btn重复创建窗口,所以错误。

    我们要预防重复创建有两个方法:

    方法一,判断当前button对象如果已经和一个窗口关联在一起了,就销毁窗口,再一次点击再创建。

    增加类CtestDlg成员变量bool m_bIsCreate;这个变量还可以是局部变量,为了不让每次调用都要初始化,把它设置成静态局部变量。

    方法二,凡是从CWnd继承的类都有一个m_hWnd的成员变量,保存了和C++对象相关的句柄。当对象和一个窗口向关联时句柄就有值,否则句柄值为空。

    if(!m_btn.m_hWnd)
    
    {
    
    m_btn.Create(L"WW",BS_DEFPUSHBUTTON|WS_VISIBLE|WS_CHILD,
    
    CRect(0,0,100,100),this,123);
    
    }
    
    else
    
    {
    
    m_btn.DestroyWindow();
    
    }
    View Code

     

    (2)Task:点击静态文本框,让其Caption变为中文

    首先,我们要熟悉相关控件。控件大小对齐等操作使用上面的格式按钮,格式快捷按钮和Format中的菜单项一样,注意Format菜单只有在对话框编辑时才有。

    静态文本框控件:用来标记,起注释作用(放同一个空间,可以点击那个控件按CTRL键拖动),可以在属性页更改Caption。所有的静态文本框ID号都一样。一般不用于响应消息

    编辑框控件:用于输入文本内容。属性页没有Caption

     

    更改静态文本框ID号为IDC_NUMBER1,增加消息响应函数。

    静态文本框实际上也是窗口,获得窗口内容用函数CWnd::GetWindowText()

    获得指定控件的指针或者子窗口指针函数CWnd::GetDlgItem()。

    void CTestDlg::OnStnClickedNumber1()
    
    {
    
    // TODO: Add your control notification handler code here
    
    CString str;//接收静态文本框文本
    
    If(GetDlgItem(IDC_NUMBER1)->GetWindowText(str),str==”Number1:”)//整个逗号表达式的值是第二个表达式的值
    
    {
    
    GetDlgItem(IDC_NUMBER1)->SetWindowText(“数值1:”);
    
    }
    
    else
    
    {
    
    GetDlgItem(IDC_NUMBER1)->SetWindowText(“Number1:”);
    
    }
    
    }
    View Code

     

    发现不能实现功能,排错,先看函数调用,没错,再看字符是否写对。我们可以直接复制静态文本框的Caption,这样可以保证正确。排错后发现还是不行。

     

    答案:静态文本框默认不能接受响应消息,我们必须把属性内的Notify改为TRUE才行。

     

    (3)Task:在第一个、第二个编辑框分别输入数值,点击Add按钮让第三个显示两者之和

     

    访问控件方法一:

    void CTestDlg::OnBnClickedBtnAdd()
    
    {
    
    int num1,num2,num3;
    
    char ch1[10],ch2[10],ch3[10];
    
     
    
    GetDlgItem(IDC_EDIT1)->GetWindowText((LPTSTR)ch1,10);
    
    GetDlgItem(IDC_EDIT2)->GetWindowText((LPTSTR)ch2,10);
    
    //将字符转换为数值
    
    num1=::atoi(ch1);//ch1字符串中的内容必须是数值
    
    num2=::atoi(ch2);
    
    num3=num1+num2;
    
    ::itoa(num3,ch3,10);
    
    GetDlgItem(IDC_EDIT3)->SetWindowText((LPTSTR)ch3);
    
    }
    View Code

     

    访问控件方法二:

    GetDlgItemText()相当于GetDlgItem()+GetWindowText()
    
     
    
    void CTestDlg::OnBnClickedBtnAdd()
    
    {
    
    int num1,num2,num3;
    
    char ch1[10],ch2[10],ch3[10];
    
    GetDlgItemText(IDC_EDIT1,(LPTSTR)ch1,10);
    
    GetDlgItemText(IDC_EDIT2,(LPTSTR)ch2,10);
    
    num1=::atoi(ch1);//ch1字符串中的内容必须是数值
    
    num2=::atoi(ch2);
    
    num3=num1+num2;
    
    ::itoa(num3,ch3,10);
    
    SetDlgItemText(IDC_EDIT3,(LPTSTR)ch3);
    
    }
    View Code

     

    访问控件方法三:

    CWnd::GetDlgItemInt()获取一个控件的文本转换为整型返回

    CWnd::GetDlgItemInt(Int nID,BOOL* lpTrans=NULL,BOOL bSigned=TRUE);

    参数一控件ID,参数二错误标示,参数三符号标示,若为真,要看正负号

    CWnd::SetDlgItemInt(Int nID,UINT nValue,BOOL bSigned=TRUE);

    参数一控件ID,参数二欲设置的值,参数三符号标示,若为真,要看正负号

    这种方法推荐采用。

    void CTestDlg::OnBnClickedBtnAdd()
    
    {
    
    int num1,num2,num3;
    
    num1=GetDlgItemInt(IDC_EDIT1);
    
    num2=GetDlgItemInt(IDC_EDIT2);
    
     
    
    num3=num1+num2;
    
    SetDlgItemInt(IDC_EDIT3,num3);
    
    }
    View Code

     

    访问控件方法四(最简单的一种):添加数据变量

    将对话框上的三个编辑框控件分别关联三个成员变量,我们可用成员变量操纵编辑框变量。

    给控件添加成员变量方法:右键控件->Add variable,我们还可以为值设定数值范围,超过的报错提示系统已编写好。添加控件如下图:

     

    添加后,在CTestDlg::DoDataExchange()(数据交换函数,此函数不能直接调用,必须调用UpdataData())会有如下函数:

    DDX_Text(pDX, IDC_EDIT1, m_num1);

    DDX_Text()用来将制定控件与成员变量相关联

     

    进行控件与变量的数据交换是DoDataExchange()进行的,但是我们不能直接调用此函数,而是通过调用UpdateData()来实现,参数TRUE表明从控件当中取回值,反之,将成员变量的值赋予控件;为了从编辑框中获得输入值。

    将m_num3的值放入编辑框中再次调用UpdateData(),进行初始化。

    void CTestDlg::OnBnClickedBtnAdd()
    
    {
    
        UpdateData();
    
     m_num3=m_num1+m_num2;
    
     UpdateData(false);
    
    }
    View Code

     

    访问控件方法五:添加控件变量

    void CTestDlg::OnBnClickedBtnAdd()
    
    {
    
       int num1,num2,num3;
    
    char ch1[10],ch2[10],ch3[10];
    
    m_edit1.GetWindowText((LPTSTR)ch1,10);
    
    m_edit2.GetWindowText((LPTSTR)ch2,10);
    
    num1=::atoi(ch1);//ch1字符串中的内容必须是数值
    
    num2=::atoi(ch2);
    
    num3=num1+num2;
    
    ::itoa(num3,ch3,10);
    
    m_edit3.SetWindowText((LPTSTR)ch3);
    
    }
    
    //添加控件变量过程和添加数值变量基本一致,把图2category改为control即可。
    View Code

     

    方法六:通过消息机制获取文本WM_GETTEXT

    void CTestDlg::OnBnClickedBtnAdd()
    
    {
    
       int num1,num2,num3;
    
    char ch1[10],ch2[10],ch3[10];
    
        
    
    //发送消息的四种û¡式
    
     
    
    //形式.表明调用的是Win32API函数,而不是类的成员函数
    
        //参数一先获取编辑框指针再指向其句柄,参数二消息类型WM_GETTEXT,
    
    //参数三指示要拷贝的字符数,参数四表示文本buffer。
    
    ::SendMessage(GetDlgItem(IDC->EDIT1)->w_hWnd,WM_GETTEXT,10,(LPARAM)ch1);
    
    //形式.因编辑框已关联控件变量故可直接使用控件变量
    
    ::SendMessage(m_edit1.m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);
    
     
    
    //形式.不使用Win32API函数,用CWnd成员函数SendMessage()发送消息
    
    GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10,(LPARAM)ch1);
    
     
    
    //形式.使用控件变量的SendMessage()直接发áê消息
    
    m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1);
    
    m_edit2.SendMessage(WM_GETTEXT,10,(LPARAM)ch2);
    
    num1=::atoi(ch1);//ch1字符串中的内容必须是数值
    
    num2=::atoi(ch2);
    
    num3=num1+num2;
    
    ::itoa(num3,ch3,10);
    
    m_edit3.SendMessage(WM_SETTEXT,0,(LPARAM)ch3);
    
    }
    View Code

     

    访问控件方法七:直接给一个对话框的子控件发送消息

    CWnd::SendDlgItemMessage()等价于先调用GetDlgMessage()再调用SendMessage()。
    
    void CTestDlg::OnBnClickedBtnAdd()
    
    {
    
    int num1,num2,num3;
    
    char ch1[10],ch2[10],ch3[10];
    
        SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);
    
       SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);
    
       num1=::atoi(ch1);//ch1字符串中的内容必须是数值
    
    num2=::atoi(ch2);
    
    num3=num1+num2;
    
    ::itoa(num3,ch3,10);
    
       SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,(LPARAM)ch3);
    
      //获取编辑框鼠标复选部分内容而非整个窗口内容EM_GETSEL,EM_SETSEL
    
      //对于EM_SETSEL消息,当范围是0,-1时,全选对话框内容
    
       SendDlgItemMessage(IDC_EDIT3,EM_SETSEL,1,3);
    
       //将编辑框3设置为焦点所在
    
    m_edit3.SetFocus();
    
    }
    View Code

    ##对话框控件访问七种方式总结:

    1.GetDlgItem()//获取子控件指针->Get(Set)WindowText()

    2.GetDlgItemText()/SetDlgItemText()

    3.GetDlgItemInt()/SetDlgItemInt()

    4.将控件和整型变量相关联

    5.将控件和控件变量相关联

    6.SendMessage()

    7.SendDlgItemMessage()

    其中1和4最常用,当然要根据实际需求

    用的最少的是发送消息6和7,SDK经常用发送消息

    (3)Task:对话框的收缩与扩展功能,点击Shrink按钮的时候切除对话框一部分,之后,将文本内容变为Extend,点Extend时还原对话框

    增加Button控件,编辑相应的消息相应函数。对按钮的相应函数,只需在资源列表双击按钮图标!

    void CTestDlg::OnBnClickedButton2()
    
    {
    
    // TODO: Add your control notification handler code here
    
    CString str;
    
    if(GetDlgItemText(IDC_BUTTON2,str),str==”Shrink<<”)
    
    {
    
    SetDlgItemText(IDC_BUTTON2,”Extend>>”);
    
    }
    
    else
    
    {
    
    SetDlgItemText(IDC_BUTTON2,”Shrink<<”);
    
    }
    
    }
    View Code

    (4)Task:点击Shirk,分隔符以下的收缩,点击Extend恢复。

    增加分隔符用于表示要切割的部分:

    资源视图,分隔符用图像控件代替,查看属性:分隔符ID为IDC_STATIC,说明不能接受相应消息。改为IDC_SEPARATOR,SunKen属性改为TRUE。

    思路:对话框尺寸、原点应保留。右下角横坐标不变,纵坐标改变

    static  CRect  rectLarge;//为避免重复定义,声明为static
    
    static  CRect  rectSmall;
    
    //判断对话框原始尺寸是否是没被赋值,用CRect成员函数
    
    //IsRectNull()看CRect四个坐标值是否都为空,IsRectEmpty()看CRect区域是否为空
    
    if(rectLarge.IsRectNull())
    
    {
    
    CRect  rectSeparator;
    
    //获取原始窗口矩形区域尺寸
    
    GetWindowRect(&rectLarge);
    
    //获取切割后剩余矩形区域尺寸大小,左上角顶部左顶点不变,变化的只是右下角顶点的纵坐标  
    
          GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator);
    
    rectSmall.left=rectLarge.left;
    
    rectSmall.top=rectLarge.top;
    
    rectSmall.right=rectLarge.right;
    
    rectSmall.bottom=rectSeparator.bottom;
    
    }
    
    //伸缩扩展功能CWnd::SetWindowPos()设置顶窗口位置与ZOrder
    //SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);详见MSDN
    
    if(str==L"Shrink<<")
    
    {
    
    SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),
    
     SWP_NOMOVE|SWP_NOZORDER);
    
    }
    
    else
    
    {
    
    SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),
    
     SWP_NOMOVE|SWP_NOZORDER);
    
    }
    
    //隐藏分割线将控件的visible属性设为FALSE
    View Code

    (5)Task:编辑框1输入点击回车,鼠标焦点转向下一个控件

    #发现一旦回车,对话框消失,因为OK键默认相应回车

    a.将OK键的相应函数取消。双击资源视图OK键进入响应函数,注释其调用的OnOK();

    b.SetWindowLong(HWND hWnd,int nIndex,LONG dwNewLong);改变指定窗口的属性。参数1指定窗口,参数2指定改变类型,参数3指定新值

    c.VC++6.0在CTestDlg类中添加WM_INITDIALOG消息,此消息是指在对话框都创建好且显示前要发送的消息。VS2008在CTestDlg类中右键属性窗口中的重写图标(最后一个)添加OnInitDialog消息映射。

    此过程不能在对话框的ONCREATE函数中设置,因为我们是对编辑框的操作,在对话框ONCREATE函数中,编辑框还没有产生。子控件创建过程在对话框的ONCREATE函数执行后和对话框显示之前完成。

     

    WNDPROC  prevProc;
    //定义一个窗口过程类型,放在最前面
    BOOL CTestDlg::OnInitDialog()
    {
    
    CDialog::OnInitDialog();
    // TODO:  Add extra initialization here
    prevProc=(WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_WNDPROC,(LONG)WinWuProc);
    
    return TRUE;  // return TRUE unless you set the focus to a control
    // EXCEPTION: OCX Property Pages should return FALSE
    
    }
    
     
    
    //写窗口过程函数:
    LRESULT CALLBACK WinWuProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
    {
    
    //对于一个WM_CHAR消息,w_Param保存了字符的ASCII码
    //如果消息是WM_CHAR并且是回车,让光标移到下一个编辑框窗口
    if(uMsg==WM_CHAR&&wParam==0x0d)
    {
    
    //目前窗口过程函数是全局函数,所以不能用CWnd成员函数,只能用WIN32API函数(SDK平台函数)
    
    //获取编辑框下一个窗口句柄GetNextWindow()
    
    //::SetFocus(::GetNextWindow(hwnd,GW_HWNDNEXT));
    
    //另一个获取窗口句柄函数
    
    ::SetFocus(::GetWindow(hwnd,GW_HWNDNEXT));
    
    //第三种获取窗口句柄函数
    
    ::SetFocus(::GetNextDlgTabItem(::GetParent(hwnd),hwnd,false));
    
    return 1;
    
    }
    else//如果不是,返回给先前窗口过程函数
    {
    
    return prevProc(hwnd,uMsg,wParam,lParam);
    
    }
    }
    
    //注意将编辑框一属性MultiLine设为True;
    View Code

     

    Task(5)方法二(更方便)实现按回车,焦点依次下移

    缺省按钮的响应函数来响应回车键,在相应函数中将焦点依次向下传递

    将编辑框1的multiLine属性恢复为FALSE。

    在OnOk()VS2008变为OnBnClickedOk()函数中完成

    void CTestDlg::OnBnClickedOk()
    
    {
    
    // TODO: Add your control notification handler code here
    
    //GetDlgItem(IDC_EDIT1)->GetNextWindow()->SetFocus();只能到第二个
    
    //GetFocus()->GetNextWindow()->SetFocus();//可实现但是最后一个会出错
    
    //GetFocus()->GetNextWindow(GW_HWNDNEXT)->SetFocus();//可实现但是最后一个会出错
    
    //GetNextDlgTabItem()此函数按照Tab_Stop属性依次向下查找
    
    //查看Tab Order,Format子菜单下Tab Order
    
    GetNextDlgTabItem(GetFocus())->SetFocus();
    
    //OnOK();
    
    }
    View Code

     

    #注意:

    我们可以把Shrink<<按钮设置为Default Button,这是回车时,由Shrink<<按钮的相应函数进行相应。一般情况默认OnOk()响应回车,就算没有OK按钮。

    我们可以自己添加OK按钮,ID设置为IDOK而不是IDC_OK。

     

    Task(6):逃跑按钮

    实现细节:在对话框上增加一个按钮,我们点击按钮时,按钮自动移动到其他位置

    在这里,我们做一个简化,巧妙地方法是设置两个相同的按钮,鼠标移动到其中一个就隐藏。

     

    #注意:对话框Font属性可修改字体

     

    实现步骤:

    1.添加两个相同的按钮控件IDC_BUTTON1和IDC_BUTTON2

    2.增加新类:->project->Add Class->MFC类CWinWu,基类设置为CButton.

    3.将两个控件分别关联成员变量m_btn1、m_btn2,variable设置为CWinWu.

    4.在CMFC_Dialog2Dlg头文件中包涵”WinWu.h”

    5.为CWinWu类中添加OnMouseMove()消息处理函数,用这个函数来完成一个控件隐藏一个控件显示的功能。

    6.获取控件指针:添加成员变量m_pBtn,类型CWinWu*

    //m_btn1和m_btn2作为CWinWu的实例化对象内部都有m_pBtn这个指针变量。我们让每一个对象的指针保留对方对象的首地址,当其中一个隐藏,我们就调用它的指针(指向另一个对象)的ShowWindow()。

    7.交换地址放在OnInitDialog()函数内部,此函数用来响应WM_INITDIALOG消息的,该消息在对话框显示之前发送。

    BOOL CMFC_Dialog2Dlg::OnInitDialog()
    
    {
    
    CDialog::OnInitDialog();
    
    m_btn1.m_pBtn=&m_btn2;
    
    m_btn2.m_pBtn=&m_btn1;
    
    return TRUE;  // return TRUE  unless you set the focus to a control
    
    }
    View Code

     

    8.隐藏自身按钮

    void CWinWu::OnMouseMove(UINT nFlags, CPoint point)
    
    {
    
    // TODO: Add your message handler code here and/or call default
    
    ShowWindow(SW_HIDE);
    
    m_pBtn->ShowWindow(SM_SHOW);
    
    CButton::OnMouseMove(nFlags, point);
    
    }
    View Code

     

    9.隐藏其中的一个按钮:到资源视图,选中其中一个属性visible->false
    ---------------------
    版权声明:本文为CSDN博主「Bright_Geek」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/bright_geek/article/details/40456279

    转载于:https://www.cnblogs.com/blogpro/p/11340233.html

    展开全文
  • mfc 对话框

    2009-03-11 19:55:00
    1,动态创建按钮  1)增加全局变量 CButton m_btn;  2)在需要创建的地方 ...m_btn.m_hWnd)//通过使用窗口句柄来判断这个按钮... 注意: 对话框初始的OK的ID号为IDOK,即使删除按钮(OnOk函数存在),依然会响应OnOk函数
  • 基于Visual Stadio 2017 MFC 对话框背景导入问题第一种方法 (失真率较高)第二种方法 (该方法的失真率比上一种方法低) 本文仅作学习使用,欢迎各位大佬补充改正。因为MFC已经过于古老,网上关于MFC的部分使用的...
  • 基于MFC对话框的GridfCtrl显示SQL表格

    千次阅读 2017-01-12 21:31:51
    mfc对话框显示表格有那么几种方法:使用微软的CListCtrl控件,使用Joe和chris编写的GridCtrl控件等。GridCtrl更专业些。这款控件出世将近20年,使用也很广泛。但是用于显示SQL表格的帮助文件较少。在网上找到10年前...
  • 在 MFC对话框里利用CHtmlView加载界面(二)———— MFC 调用 JaveScript 中,我们实现MFC对JaveScript方法的调用。 现在我们想既然MFC能调用JaveScript,那么又该如何实现JaveScript调用MFC呢? 只有MFC 能和 ...
  • MFC 对话框与常用控件

    千次阅读 2018-11-17 00:13:41
    模态对话框创建方式 【方法一】创建对话框类的对象,然后调用domodal CGuiDlg dlg; dlg.DoModal(); 会阻塞 【方法二】 CDialog dlg(IDD_GUI_DLG); dlg.DoModal(); 2.非模态对话框 先创建,在显示 在菜单...
  • MFC对话框工程移植

    千次阅读 2013-05-21 09:09:47
    最近需要将两个老的mfc项目合并,因此至少有一个工程的资源需要移植到另一个。移植主要是针对对话框资源,资源主要包含在*.rc和resource.h文件中,resource.h包含的是工程资源ID的定义,*.rc包含对话框资源的定义。...
  • Visual C++以 MFC 对话框的形式承载 Windows 窗体用户控件MFC 提供模板类 CWinFormsDialog,使用该类可以在模式或无模式 MFC 对话框中承载 Windows 窗体用户控件 (UserControl)。CWinFormsDialog 是从 MFC 类 ...
  • 用SkinH美化MFC对话框

    千次阅读 2013-12-26 13:24:22
    步骤:(假设项目名称为...1.将SkinH.dll复制到项目的Debug(Test\Debug)文件夹下 2.将SkinH.h、SkinH.lib复制到项目的Test(Test\Test)文件夹下,也可以放在res文件夹下。 3.将皮肤复制到res文件夹下,如皮肤文件
  • MFC对话框应用程序中谷歌CEF浏览器内核的使用  最近在做一个与浏览器相关的MFC项目,用户要求使用IE和谷歌双内核。对于IE内核可以直接使用MFC中的ACTIVEX控件,但是对于谷歌浏览器内核却并没有这么现成的控件...
  • MFC 对话框(窗口)透明

    千次阅读 2017-03-21 20:36:57
    下面是我复制过来的 使用SetLayeredWindowAttributes可以方便的制作透明窗体,此函数在w2k以上才支持,而且如果希望直接使用的话,可能需要下载最新的SDK。不过此函数在w2k的user32.dll里有实现,所以如果你不希望...
  • 本人菜鸟一枚,最近在做MFC复制MFC上一个对话框建了另一个对话框,这样就连同之前对话框上的控件也复制过来了,然后我删了控件,运行成功,但是运行后的界面上之前删除的控件却还在,不知是怎么回事?...
  • 1、 拷贝所需要的对话框资源 在VS2012或者其他版本中打开现有的解决方案,然后在左上...再打开Dialog文件夹,如下图选中所要复制对话框按Ctrl+C(编辑->复制也可以);然后选中现在工作区的Resource标签页中的Dialo
  • 前言:很多时候,我们需要把已经存在的一个对话框资源(或者类似的)复制到另一个工程中(好吧,其实就是懒~)可用方案:1、把两个工程添加到一个项目中,这样你就可以随意的复制粘贴了,当然,这种办法还需要你去...
  • [最后的留存]MFC对话框程序改为无模式对话框白云小飞第一、通过VC应用程序向导生成一个MFC模式对话框程序框架第二、在CMyApp中增加一个CDialog*类型(当然也可以是CMyDialog*)的指针变量m_pMainDlg。//my.hclass ...
  • 1、总结  所有的控件的控件类都是由CWnd类派生,因此控件实际上也是窗口。控件通常是作为对话框的子窗口创建,也可以出现在... MFC的控件类封装了控件的功能 控件 功能 对应控件类 静态正文(Static
  • VS2010 MFC对话框程序 打包发布步骤

    千次阅读 2019-02-20 16:49:07
    MFC对话框程序需要添加mfc100d.dll,msvcp100d.dll两个文件,这两个文件在/windows/system32文件夹中。添加时会弹出对话框,选择“是” 添加后,会出现在解决方案资源管理器的解决方案项目目录下。 ...
  • 另一类对话框程序却没有相应支持,从MFC打印及打印预览的标准支持入手,可以在对话框程序中,增加三个类以支持打印及打印预览,本文介绍了这三个类的实现。 打印及打印预览是编写应用程序经常要解决的问题,为了...
  • 基于MFC的ActiveX控件,主要功能...2.添加对话框MyDlg类,对话框ID为IDD_MYDLG; 3.在控件类CActiveXDemoCtrl类中进行改写如下函数 在CActiveXDemoCtrl.h声明对话框类的变量CMyDlg m_mydlg; 改写OnCreate方法 int CAc
  • 状态栏 在头文件中定义一个状态栏还有一个状态栏ID的数组(状态栏分多少格就多长的数组) CStatusBar m_StatusBar;...//复制ID m_nStatusBarID[0] = 10240; m_nStatusBarID[1] = 10241; //创建 m_StatusBar.Create(thi
  • Visual C++ 2010开发权威指南--4 MFC对话框编程 CDialog类是CWnd类的派生类。 4.1 对话框简介 4.1.1 对话框控件简介 1)静态正文控件CStatic 2)图片CStatic 3)编辑框CEdit GetLineCount():获得多行编辑框...
  • 将CEF3嵌入到MFC对话框程序中去
  • Visual C++ 2010开发权威指南--5 MFC对话框控件 所有控件都是由CWnd派生得到。 5.1 Button CButton的常用成员函数 GetState() SetState() SetCheck() GetButtonStyle() SetButtonStyle(); SetIcon() ...
  • CEF:MFC 对话框 Demo(VS2013)

    千次阅读 热门讨论 2017-07-11 23:16:28
    CEF 的官方例子 cefsimple 和 cefclient 都是使用 Win32 API 开发的,这给大家学习使用 CEF 带来了很大不便,很多人更需要一个使用 MFC 开发的例子。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,645
精华内容 3,458
关键字:

mfc对话框复制