mfc中两个mfc按钮美化之间信息交流

1384人阅读
窗口消息的传递
http://bbs.bccn.net/thread--1.html
声明:本文非本人所写,本文已经写在本人CSDN博客里。本原来源于一篇英文文章的翻译。
&&&&&&&&消息(Message)是窗口间通信的最重要的方式之一。传统的程序从main()函数处开始一行一行的执行直到退出,但是窗口的概念则不同。窗口对事件(event)进行响应,这种事件称为消息。事件由程序本身、其他程序或系统程序产生,这些事件又产生消息。鼠标移动、按键等都会产生事件。消息分为两种即窗口消息和线程消息。这里只分析窗口消息。
&&&&&&&&&所谓的窗口消息,大致上,必须传递给一个窗口。所有的消息都存储在消息队列(Message Queue)中。消息队列用于在应用程序之间传递消息。
&&&&&&&&从消息队列中捕获消息的方式是消息循环(Message Loop)。一旦一个消息被某个窗口接受,消息循环即分配此消息并调用一个消息句柄,有一个由程序员设计的函数用于处理此消息。
&&&&&&&&消息循环在接收到WM_QUIT消息后终止,并指示程序结束。当用户选择File菜单下的Exit子菜单、点击关闭按钮、按下alt+F4时均会产生WM_QUIT消息。窗口有缺省的消息句柄用来进行缺省行为。例如,按钮(Button)派生于窗口类,当按钮接收到WM_PAINT时会重新绘制按钮,当左击按钮时会接收到WM_LBUTTONDOWN并自绘按下的按钮形态。
&&&&&&&&窗口定义了很多类型的消息,他们通常以“WM”开头。例如WM_SIZE,当窗口大小发生变化时发送此消息。在MFC中,用On代替“WM_”,例如WM_SIZE在MFC中表示为OnSize。
&&&&&&&&一个消息有两个参数,这两个参数携带该事件的一些信息。每个参数均是32位宽的,lParam和wParam。有的时候消息也会返回一个值给发送该消息的窗口。
&&&&&&&&MFC自动的生成了消息循环所需的代码,WinMain调用的CWinApp成员函数提供消息循环并将这些消息送给各个窗口。需要我们做的只是创建消息句柄,这可以借助于ClassWizard完成。下面即是一个响应WN_CLOSE消息的例子。
程序代码:
view plaincopy to clipboardprint?void&CAboutWindow::OnClose()&
&&&&int&Ret = MessageBox(_T(&Are you sure you want to close the window?&),&
&&&&&&&&&&&&&&&&&&&&&&&& _T(&Close Window?&), MB_YESNO);&
&&&&if(Ret == IDYES){&
&&&&&&&&//&The User is sure, close the window by calling the base class&
&&&&&&&&//&member&
&&&&&&&&CWnd::OnClose()&
&&&&else{&
&&&&&&&&//&The user pressed no, screen out the message by not calling&
&&&&&&&&//&the base class member&
&&&&&&&&//Do nothing&
void&CAboutWindow::OnClose()
&&&&int&Ret = MessageBox(_T(&Are you sure you want to close the window?&),
&&&&&&&&&&&&&&&&&&&&&&&& _T(&Close Window?&), MB_YESNO);
&&&&if(Ret == IDYES){
&&&&&&&&//&The User is sure, close the window by calling the base class
&&&&&&&&//&member
&&&&&&&&CWnd::OnClose()
&&&&&&&&//&The user pressed no, screen out the message by not calling
&&&&&&&&//&the base class member
&&&&&&&&//Do nothing
&&&&&&&&为了窗口间的通信,程序员需要自己发送消息。由于消息均是窗口发送的,所以需要一个C++窗口指针。可以通过CWnd::FindWindow、GetDlgItem()、GetParent()等获得窗口指针。CWnd类有一个SendMessage()成员函数用于发送消息给他的窗口。例如,如果有一个日历控件需要去关闭,可以通过产生一个WM_CLOSE消息去告知该控件。可以通过CWnd::FindWindow()传递一个Caption来获得指向该控件的C++窗口指针。
程序代码:
view plaincopy to clipboardprint?CWnd *pC&
//Get a pointer to the &Calculator& Window&
pCalc = CWnd::FindWindow(NULL, _T(&Calculator));&
if(pCalc == NULL){&
&&&&//Couldn't find Calculator&
&&& pCalc-&SendMessage(WM_CLOSE);&
&&&&//Presto! The Calculator should close.&
当一个窗口接收到某个消息后,MFC将调用类的成员函数。但是MFC如何知道该调用哪个函数呢?
&&&&&&&&为了解决上述问题,MFC运用了一个叫做消息映射(Message Map)机制。消息映射就是将消息和所要调用的函数绑定在一起。一旦接受到一个消息,MFC将进入消息映射去寻找与该消息相对应的消息句柄。
&&&&&&&&&MFC采用的是一系列的宏(Macros)去添加消息映射到类中。当运用ClassWizard去添加一个消息句柄时首先添加该 函数到类中然后添加响应的宏到消息映射中。例如若用ClassWizard添加WM_CLOSE的消息句柄时,会有一下三个动作:
1.在类的实现(.cpp)中的消息映射中:
程序代码:
view plaincopy to clipboardprint?BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)&
&&&&//{{AFX_MSG_MAP(CAboutDlg)&&
&&& ON_WM_CLOSE()&
&&&&//}}AFX_MSG_MAP&&
END_MESSAGE_MAP()&
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
&&&&//{{AFX_MSG_MAP(CAboutDlg)
&&& ON_WM_CLOSE()
&&&&//}}AFX_MSG_MAP
END_MESSAGE_MAP()
2.在类(.h)声明中声明函数:该函数前有afx_msg关键字
程序代码:
view plaincopy to clipboardprint?protected:&
&&&&//{{AFX_MSG(CAboutDlg)&&
&&& afx_msg&void&OnClose();&
&&&&//}}AFX_MSG&&
&&& DECLARE_MESSAGE_MAP()&
protected:
&&&&//{{AFX_MSG(CAboutDlg)
&&& afx_msg&void&OnClose();
&&&&//}}AFX_MSG
&&& DECLARE_MESSAGE_MAP()
3.在类的实现(.cpp)中:
程序代码:
view plaincopy to clipboardprint?void&CAboutDlg::OnClose()&&
&&&&//&TODO: Add your message handler code here and/or call default&&
&&& CDialog::OnClose();&
void&CAboutDlg::OnClose()
&&&&//&TODO: Add your message handler code here and/or call default
&&& CDialog::OnClose();
宏DECLARE_MESSAGE_MAP()告知MFC给消息映射添加必要的代码。
宏BEGIN_MESSAGE_MAP()表示消息映射的开始,括弧类的两个参数指示了发送消息的类和其基类。
宏END_MESSAGE_MAP()表示消息映射的结束。
&&&&&&&&有一些消息ClassWizard并不支持但是可以手工添加。但有得时候没有消息映射宏,这个时候可以采用通用宏ON_MESSAGE,利用该宏可以传递任何消息。
view plaincopy to clipboardprint?afx_msg LRESULT OnMessage(WPARAM wParam, LPARAM lParam);&
afx_msg LRESULT OnMessage(WPARAM wParam, LPARAM lParam);
&&&&&&&&&OnMessage()是句柄函数,ON_MESSAGE有两个参数,句柄的地址和消息。例如下面的例子将WM_GETTEXTLENGTH映射到OnGetTextLength():
程序代码:
view plaincopy to clipboardprint?ON_MESSAGE (WM_GETTEXTLENGTH, OnGetTextLength)&
ON_MESSAGE (WM_GETTEXTLENGTH, OnGetTextLength)
OnGetTextLength的原形为:
view plaincopy to clipboardprint?afx_msg LRESULT OnGetTextLength(WPARAM wParam, LPARAM lParam);&
afx_msg LRESULT OnGetTextLength(WPARAM wParam, LPARAM lParam);
&&&&&&&&&有得时候,需要在两个窗口或两个应用程序间进行通信,一个简单的解决方法是采用自定义消息。为了避免与系统定义的消息冲突,需要运用一个大于0xBFF的数WM_APP。
程序代码:
view plaincopy to clipboardprint?#define&WM_DELETEALL WM_APP + 0x100&&
pYourDialog-&SendMessage(WM_DELETEALL,&<span style="color:#,&<span style="color:#);&
#define&WM_DELETEALL WM_APP &#43; 0x100
pYourDialog-&SendMessage(WM_DELETEALL,&<span style="color:#,&<span style="color:#);&
&&&&&&&&运用宏WM_MESSAGE完成消息映射,将WM_DELETEALL与句柄函数OnDeleteAll()绑定。
程序代码:
view plaincopy to clipboardprint?#define&WM_DELETEALL WM_APP &#43; 0x100&&
//Message Map entry:&&
ON_MESSAGE (WM_DELETEALL, OnDeleteAll)&
//OnDeleteAll is prototyped as&&&
afx_msg LRESULT OnDeleteAll(WPARAM wParam, LPARAM lParam);&
//And is implemented as&&&
LRESULT OnDeleteAll(WPARAM wParam, LPARAM lParam){&
&&&&//Do What ever you want&&
&&&&return&&
#define&WM_DELETEALL WM_APP &#43; 0x100
//Message Map entry:
ON_MESSAGE (WM_DELETEALL, OnDeleteAll)
//OnDeleteAll is prototyped as
afx_msg LRESULT OnDeleteAll(WPARAM wParam, LPARAM lParam);
//And is implemented as
LRESULT OnDeleteAll(WPARAM wParam, LPARAM lParam){
&&&&//Do What ever you want
&&&&return&
&&&&&RegisterWindowMessage()用于定义一个新的窗口消息,必须保证其独一无二。宏ON_REGISTERED_MESSAGE表示该消息。例如:
view plaincopy to clipboardprint?class&CMyWnd :&public&CMyParentWndClass&
&&& CMyWnd();&
&&&&//{{AFX_MSG(CMyWnd)&&
&&& afx_msg LRESULT OnFind(WPARAM wParam, LPARAM lParam);&
&&&&//}}AFX_MSG&&
&&& DECLARE_MESSAGE_MAP()&
static&UINT WM_FIND = RegisterWindowMessage(&YOURAPP_FIND_MSG&);&
BEGIN_MESSAGE_MAP(CMyWnd, CMyParentWndClass)&
&&&&//{{AFX_MSG_MAP(CMyWnd)&&
&&&&&&&&ON_REGISTERED_MESSAGE(WM_FIND, OnFind)&
&&&&//}}AFX_MSG_MAP&&
END_MESSAGE_MAP()&
class&CMyWnd :&public&CMyParentWndClass
&&& CMyWnd();
&&&&//{{AFX_MSG(CMyWnd)
&&& afx_msg LRESULT OnFind(WPARAM wParam, LPARAM lParam);
&&&&//}}AFX_MSG
&&& DECLARE_MESSAGE_MAP()
static&UINT WM_FIND = RegisterWindowMessage(&YOURAPP_FIND_MSG&);
BEGIN_MESSAGE_MAP(CMyWnd, CMyParentWndClass)
&&&&//{{AFX_MSG_MAP(CMyWnd)
&&&&&&&&ON_REGISTERED_MESSAGE(WM_FIND, OnFind)
&&&&//}}AFX_MSG_MAP
END_MESSAGE_MAP()
&&&&&&&&用该方式定义的消息的范围为0xC000 - 0xFFFF,并采用sendmessage()发送该消息。
程序代码:
view plaincopy to clipboardprint?static&UINT WM_FIND = RegisterWindowMessage(&YOURAPP_FIND_MSG&);&
pFindWindow-&SendMessage(WM_FIND, lParam, wParam);&
static&UINT WM_FIND = RegisterWindowMessage(&YOURAPP_FIND_MSG&);
pFindWindow-&SendMessage(WM_FIND, lParam, wParam);
访问:15154次
排名:千里之外
转载:24篇
(6)(17)(3)【原创】如何在VC++中两个对话框相互传递信息
我的图书馆
【原创】如何在VC++中两个对话框相互传递信息
摘自技术流博客[]& && &&&在VC++中,打开对话框一般是用DoModal()函数调用模态对话框,但是模态对话框只能在对弹出的当前子窗口进行操作,而不能对父窗口进行操作,也无法传递数据到父窗口中,根据笔者的研究发现,采用非模态对话框的模式可以很好的解决这一问题。& && &&&在VS2008中新建一个就有MFC应用程序的Project项目,在弹出的MFC应用程序向导中选择“基于对话框”,取消“使用Unicode库”,单击完成。在“资源视图”里面添加一个对话框,默认ID为IDD_DIALOG1。& && &&&双击IDD_DIALOG1对话框,在弹出的MFC类向导中,类名填写CSonDialog,基类选择CDialog,单击完成。这样我们就将新建的IDD_DIALOG1关联上一个基于CDialog的类了。& && &&&在父窗口上添加一个按钮,双击,便可进入这个按钮的消息响应函数。在最上面包含CSonDialog的头文件#include “SonDialog.h”。如果在消息响应函数中写入如下代码:& && &&&CSonDialog SonW& && &&&SonWnd.DoModal();& && & 运行之后按下父窗口上的按钮,可以发现弹出了IDD_DIALOG1,但是只能在IDD_DIALOG1上操作,无法操作父窗口。如果想要在弹出子窗口后还可以操作父窗口的话,需要采用非模态对话框的模式弹出子窗口。& && & MFC在CDialog类中有一个Create(UINT nIDTemplate, CWnd *pParentWnd = 0),这个函数可以创建一个Dialog,其中参数nIDTemplate为需要创建的Dialog的ID。同时还有一个函数ShowWindow(int nCmdShow),用来显示创建的这个Dialog。在消息响应函数中写入如下代码:& && & CSonDialog SonW& && & SonWnd.Create(IDD_DIALOG1);& && & SonWnd.ShowWindow(SW_SHOW);& && & 运行之后按下父窗口上的按钮发现窗口闪了一下,然后就消失了。这是因为对象SonWnd是一个局部对象,在运行完SonWnd.ShowWindow(SW_SHOW)这条语句之后便退出了消息响应函数,因此SonWnd对象也就被销毁了。如果想要退出消息响应函数之后窗口依然存在,则需要将SonWnd定义为一个全局变量。因此在ProjectDlg.h中添加一个CSonDialog SonWnd的定义,同时由于VC++在编译的时候预编译头文件,因此还需要在ProjectDlg.h中包含CSonDialog的头文件#include “SonDialog.h”,这样在ProjectDlg.cpp中,便可以把SonDialog.h删掉了。然后在按钮的消息响应函数中添加如下代码:& && & SonWnd.Create(IDD_DIALOG1);& && & SonWnd.ShowWindow(SW_SHOW);& && & 我们发现IDD_DIALOG1被创建出来,并且一直保留着。但是还是无法和父窗口进行数据交流。根据查找资料我们发现在C++中有一个指针很特别,它指向的是当前窗口,这个指针就是this指针。我们通过传递this指针来相互调用对方的数据。& && & 在CSonDialog类中,我们添加一个指向父窗口的全局指针变量CProjectDlg *m_pFaher,同时添加一个函数WndCreate(CProjectDlg *pParent),代码如下:void CSonDialog::WndCreate(CProjectDlg *pParent){& && && &Create(IDD_DIALOG1);& && && && && && && && && && && && && && && && & //创建对话框& && && &ShowWindow(SW_SHOW);& && && && && && && && && && && && && && &&&//显示对话框& && && &m_pFather = pP& && && && && && && && && && && && && && && && && & //将父窗口指针传递进来}& && & 这个函数中调用了CDialog类中的Create()和ShowWindow()函数来创建和显示对话框,同时采用参数传递的办法将父窗口的指针传递到子窗口中。而在父窗口ProjectDlg.cpp的消息响应函数中,我们添加如下代码:& && & SonWnd.WndCreate(this);& && & 编译运行之后发现有错,因为在ProjectDlg.h的头文件中包含了SonDialog.h,而在SonDialog.h中又包含了ProjectDlg.h,这样程序在进行编译的时候就会出现头文件重复包含的错误,有两种办法可以解决此问题。& && & 第一种办法是在两个头文件中分别加入预编译命令#ifndef #define #endif命令,在SonDialog.h最上面加入& && & #ifndef SONDIALOG& && & #define SONDIALOG& && & 最下面加入& && & #endif& && & 在ProjectDlg.h最上面加入& && & #ifndef RPOJECTDLG& && & #define PROJECTDLG& && & 最下面加入& && & #endif& && & 以上语句块的意思是如果SONDIALOG/PROJECTDLG没有被定义的话,那么就定义SONDIALOG/PROJECTDLG,如果SONDIALOG/PROJECTDLG被定义的话,直接跳转到#endif,这样就可以很好的避免被重复定义的情况。这种方法我在以前编程的时候很好用,但是不知道为什么最近几次写程序这种方法都失效了,于是我又想出了另外一种办法。& && & 第二种办法的原理是采取避免在头文件中定义具体类型的指针变量,用定义空指针的方法绕过头文件重复包含的问题。由于在父窗口中,指向子窗口的对象必须是全局变量,这样才能保证子窗口在销毁之前一直有显示。因此在父窗口ProjectDlg.h中不得不包含SonDialog.h的头文件,这样就只能在SonDialog.h中想办法了。其实仔细想来我们发现在SonDialog.h中只要定义一个空指针就可以解决问题。具体方法如下:& && & 在SonDialog.h不包含ProjectDlg.h头文件,也不定义CProjectDlg的对象,而是定义一个空指针LPVOID m& &_pFather,将WndCreate()函数的参数改为LPVOID pPaernt,然后在WndCreate()函数中添加如下代码:void CSonDialog::WndCreate(LPVOID pParent){& && && &Create(IDD_DIALOG1);& && && && && && && && && && && && && && && && & //创建对话框& && && &ShowWindow(SW_SHOW);& && && && && && && && && && && && && && &&&//显示对话框& && && &m_pFather = pP& && && && && && && && && && && && && && && && && & //将父窗口指针传递进来}& && & 这样,父窗口的this指针传递进来之后到m_pFather还是一个指向任意对象的指针,只要在SonDialog.cpp的函数中需要调用父窗口中的函数或者是改动父窗口的某些变量时,在cpp文件中包含头文件ProjectDlg.h,在函数开始时加入代码:& && & CProjectDlg *M& && & Main = (CProjectDlg *)m_pF& && && && && && && && && && && && &&&//强制将LPVOID类型转换& && & Main-&& && & 就可以通过指针Main来对父窗口进行操作。这样就可以实现两个对话框中的信息相互传递了。& && & 另外在建立非模态对话框的时候要注意,重写OnOk()和OnCancel()两个函数,要在里面加入DestoryWindow()函数,OnOk()和OnCancel()函数里面并没有销毁窗口,而是使得窗口不可见,如果不销毁窗口,在下一次再次打开子窗口时,就会出现错误。& && & 以上代码在Windows 7 家庭普通版+Visual Studio 2008 SP1下运行通过。
TA的最新馆藏
喜欢该文的人也喜欢2014年11月 VC/MFC大版内专家分月排行榜第三
2017年12月 VC/MFC大版内专家分月排行榜第二2017年6月 VC/MFC大版内专家分月排行榜第二2017年5月 VC/MFC大版内专家分月排行榜第二2017年1月 VC/MFC大版内专家分月排行榜第二2016年11月 VC/MFC大版内专家分月排行榜第二2016年4月 VC/MFC大版内专家分月排行榜第二2014年11月 VC/MFC大版内专家分月排行榜第二2014年1月 VC/MFC大版内专家分月排行榜第二2013年10月 VC/MFC大版内专家分月排行榜第二2013年9月 VC/MFC大版内专家分月排行榜第二2013年6月 VC/MFC大版内专家分月排行榜第二2013年4月 VC/MFC大版内专家分月排行榜第二2012年6月 VC/MFC大版内专家分月排行榜第二
2018年1月 VC/MFC大版内专家分月排行榜第三2017年11月 VC/MFC大版内专家分月排行榜第三2017年9月 VC/MFC大版内专家分月排行榜第三2017年8月 VC/MFC大版内专家分月排行榜第三2017年4月 VC/MFC大版内专家分月排行榜第三2016年12月 VC/MFC大版内专家分月排行榜第三2016年10月 VC/MFC大版内专家分月排行榜第三2016年2月 VC/MFC大版内专家分月排行榜第三2015年10月 VC/MFC大版内专家分月排行榜第三2015年7月 VC/MFC大版内专家分月排行榜第三2012年10月 VC/MFC大版内专家分月排行榜第三
2017年12月 VC/MFC大版内专家分月排行榜第二2017年6月 VC/MFC大版内专家分月排行榜第二2017年5月 VC/MFC大版内专家分月排行榜第二2017年1月 VC/MFC大版内专家分月排行榜第二2016年11月 VC/MFC大版内专家分月排行榜第二2016年4月 VC/MFC大版内专家分月排行榜第二2014年11月 VC/MFC大版内专家分月排行榜第二2014年1月 VC/MFC大版内专家分月排行榜第二2013年10月 VC/MFC大版内专家分月排行榜第二2013年9月 VC/MFC大版内专家分月排行榜第二2013年6月 VC/MFC大版内专家分月排行榜第二2013年4月 VC/MFC大版内专家分月排行榜第二2012年6月 VC/MFC大版内专家分月排行榜第二
2018年1月 VC/MFC大版内专家分月排行榜第三2017年11月 VC/MFC大版内专家分月排行榜第三2017年9月 VC/MFC大版内专家分月排行榜第三2017年8月 VC/MFC大版内专家分月排行榜第三2017年4月 VC/MFC大版内专家分月排行榜第三2016年12月 VC/MFC大版内专家分月排行榜第三2016年10月 VC/MFC大版内专家分月排行榜第三2016年2月 VC/MFC大版内专家分月排行榜第三2015年10月 VC/MFC大版内专家分月排行榜第三2015年7月 VC/MFC大版内专家分月排行榜第三2012年10月 VC/MFC大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2014年11月 VC/MFC大版内专家分月排行榜第三
2014年11月 VC/MFC大版内专家分月排行榜第三
2016年10月优秀大版主2016年8月优秀大版主
2017年12月 总版技术专家分月排行榜第二2016年9月 总版技术专家分月排行榜第二
匿名用户不能发表回复!|MFC如何实现通过一个按钮将两组单选框的内容复制到编辑框里_百度知道
MFC如何实现通过一个按钮将两组单选框的内容复制到编辑框里
如何通过中间的按钮 将 上面两组单选框的内容 复制到编辑框里
我有更好的答案
(&IsDlgButtonChecked(IDC_AGE20)&GetWindowText(strAge);elseGetDlgItem(IDC_AGE15)-&gtCString&)&&&&&&//&&IDC_AGE20为&20&&&&&的IDGetDlgItem(IDC_AGE20)-&&&&&)&&&&&&//&&IDC_AGE20为&&15--20&&&的IDGetDlgItem(IDC_AGE1520)-&IsDlgButtonChecked(IDC_BOY)&&&)&else&CString&strA&(&IsDlgButtonChecked(IDC_AGE1520)&GetWindowText(strSex);&//&&nbsp,strSex+strAge);&&//IDC_RESULT&编辑框ID//AfxMessageBox(strSex&GetWindowText(strAge);strSif&(&&IDC_BOY为&if&if&SetDlgItemText(IDC_RESULT;&+&strAge);另外 ;boy&&&&的IDGetDlgItem(IDC_BOY)-&&elseGetDlgItem(IDC_BOY)-&GetWindowText(strAge);GetWindowText(strSex);&nbsp
采纳率:80%
来自团队:
为您推荐:
其他类似问题
单选框的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。有两个MFC程序,怎么从一个启动另一个,加一个按钮,点击按钮启动另一个_百度知道
有两个MFC程序,怎么从一个启动另一个,加一个按钮,点击按钮启动另一个
只要能解决 ,分数你开口
我有更好的答案
&#92;Documents and Settings&#92;xq1&#92,
SW_SHOWNORMAL),这个时候你想要执行到这个.exe的文件。就需要在一个按钮中添加一个 ShellExecute(NULL,
&open&.exe&;&#92;TestChess0,
&C:&#92;桌面&#92;&#92;&#92;Administrator&#92;&#92mfc程序就是编辑后就是一个.的文件.exe
采纳率:33%
jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http://e.hiphotos先给你的程序添加一个类,像添加—GH;&quot.com/zhidao/wh%3D600%2C800/sign=bd506cf8bcfd29b28bb13/e1fe08330bfc87b1cba.jpg" esrc="http://e.hiphotos.hiphotos.baidu.com/zhidao/pic/item/a2cc7cd98d1cb20e7bec54e79712://e://e.jpg" esrc="http.hiphotos.baidu.com/zhidao/wh%3D600%2C800/sign=ac024b3df8cbf/71cf3bc79f3df8dcb2feef82c028e5;QD.h&quot.baidu.hiphotos.baidu.com/zhidao/pic/item/e1fe08330bfc87b1cba.baidu://d://e
为您推荐:
其他类似问题
mfc的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 mfc按钮美化 的文章

 

随机推荐