首页 > 编程知识 正文

mfc对话框之间的传值,mfc

时间:2023-05-03 14:32:37 阅读:131832 作者:3597

平台: VS2012

程序类型: MFC APP应用程序

1在MFC对话框上方的动态控件对话框中创建的控件是MFC类的特定对象,相应的变量包含类的数据成员和函数成员。 如果在对话框上使用静态控件,则可以根据类向导将消息、响应函数和变量添加到每个控件中。 如果需要在对话框中动态创建控件,则必须手动添加消息、响应函数和变量,而不是类向导。

如果要动态创建控件,请执行以下步骤:

)1)明确控件所属类的每个控件都对应一个类,例如按钮Button所属的类是CButton。 程序需要使用CButton类创建特定的按钮对象,并通过函数指示该对象在对话框中的位置和大小。 指针具有许多优点,因此可以使用单个CButton *类型的变量来管理您创建的按钮。 但是,请谨慎使用指针变量,防止内存泄漏、野指针。

)2)确保控件的ID号在对话框中的每个控件都有唯一的ID号。 使用控件类创建特定的控件对象时也需要此ID。 ID号实际上是宏,为了控件ID的有序性,可以在VS2012“资源管理器”下的字符串表下定义每个控件的ID值。 这些ID号将自动保存在Resource.h文件中,并形成宏。

)3)动态创建控件的一般过程可以在明确控件类及其ID号后,在适当的函数中编写动态创建控件的代码。 动态生成按钮、文本框、编辑框Edit Control、组合框)等控件的过程可以表示为(文本框的创建) cmfcdialogdlg : createonestatic (lpctstr,CRect Coord,UINT IDC ) { CStatic*pStatic=NULL; p静态=新静态; assert _ valid (p静态; p静态-创建(str,WS_CHILD|WS_VISIBLE|SS_CENTER,Coord,this,IDC ); 返回静态; }

以上是创建文本框的函数。 首先明确文本框类是CStatic,然后用c的动态分配函数分配文本框对象,最后用对象Create函数(称为文本)指定对象的样式(标题str,测试将最后创建的控件地址返回给调用函数进行管理。 动态创建控件的中心是每个控件类的对象中的create函数,create函数所需的参数可能因控件类而异。 如果需要释放创建的动态按钮,可以在delete语句中释放动态按钮的地址,这也是new-delete动态分配的必要组合。 在边框上创建的控件也将消失。

)4)动态控件的大小随对话框的比例而变化,使用控件中的Create函数在对话框中动态创建控件时,坐标可以不全部为常数值。 因为可以根据用户的需要修改对话框窗口。 在MFC中,指定对话框大小发生变化的消息ON_WM_SIZE (),并获取与ON_WM_SIZE )消息相对应的响应函数OnSize ) )中大小发生变化的对话框的大小,即可获得动态可可这样,动态控件也可以跟随对话框的比例变化。

2在图片控制控件中显示图像

MFC包含将图像加载到CImage类中并在一个区域中绘制图像的成员函数。 Picture Control控件提供了CImage对象的平台。 也就是说,通过CImage对象加载到内存中的图像可以绘制在图片控制控件上。 因此,可以将CImage类与Picture Control控件类结合使用。

)1)准备图片控制控件并直接切换到对话框文件下,然后将图片控制控件拖动到对话框中。 记住那个ID号码。

)2)图像控制控件显示图像的代码仅从显示图像的角度来说。 Picture Control控件只是为图像显示提供一个平台,图像加载和绘制由CImage对象的成员函数完成,还使用其他常用函数。 int cx,cy; 图像图像; CRectrect; //根据路径加载图像image.load (_ t (e : (mylibrayphotoshop (log.jpg ) )//照片宽度高度cx=image.GetWidth (; cy=image.GetHeight (; 图片控制控件大小获取getdlgitem(IDC_picture )-getwindowrect (rect )//为由控件指示的矩形区域中的ScreenToClient选择客户区域

(&rect);//窗口移动到控件表示的区域GetDlgItem(IDC_PICTURE)->MoveWindow(rect.left, rect.top, cx, cy, TRUE);CWnd *pWnd = NULL;pWnd= GetDlgItem(IDC_PICTURE);//获取控件句柄pWnd->GetClientRect(&rect);//获取句柄指向控件区域的大小CDC *pDc = NULL;pDc= pWnd->GetDC();//获取picture的DCimage.Draw(pDc->m_hDC, rect);//将图片绘制到picture表示的区域内ReleaseDC(pDc);

读这段代码。

[1] CImage内的Load方法将指定路径下的图片载入,然后在利用其内的GetWidth和GetHeight方法获取到图片的宽度和高度。

[2] GetDlgItem通过PictureControl控件的ID获取到它的句柄后调用Picture Control中的GetWindRect方法来获取它本身在对话框中所占用的范围。然后利用ScreenToClient方法将客户区转到Picture Control内,目的是利用Picture Control内的MoveWindow方法重新设置Picture Control控件在对话框上所占的位置,是它适应图片的大小。

[3] 再重新设获取picture Control在对话框中占用的面积。用pDc来管理Picture Control中的DC。然后CImage的Draw方法就可以利用获取的参数在rect区域绘制图片了。


程序运行如下:

如果程序需要多次运行以上代码时才能够准确的显示图片,那么可以先一次性(如在OnInitDialog()函数中)载入图片。然后在OnPaint()函数中编写绘制图片的函数,让它得到多次运行。

MFC Note Over.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。