自创的对话框类向视图类发送自定义消息

合集下载

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

MFC对话框自定义消息映射的方法
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()
// 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
希望本文所述对大家的MFC程序设计有所帮助。
Hale Waihona Puke 这篇文章主要介绍了c11thread多线程编程的相关知识包括线程的创建方式结束方式及互斥锁的实例代码详解本文给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值需要的朋友可以参考下
MFC对 话 框 自 定 义 消 息 映 射 的 方 法
本文实例讲述了MFC对话框自定义消息映射的方法。分享给大家供大家参考。具体实现方法如下:
1、定义消息:
复制代码 代码如下: #define WM_MYMSG (WM_USER+100)

MFC 自定义消息 实例

MFC 自定义消息 实例

MFC 自定义消息实例手把手教:MFC AppWizard 多重文档应用程序中,由对话框向视类发送消息。

步骤:1. 在VC++中,新建工程- MFC AppWizard (exe)-工程名“Message”;ClassWizard步骤选项均为缺省,完成。

2. 在菜单IDR_MESSAGTYPE 中添加测试菜单(ID: ID_TEST,标题: test)在视类框架类中建立相应函数OnTest()。

3. 在资源中建立对话框,添加测试按钮(ID: IDC_BUTTON1,标题: MessageButton)。

4. 通过ClassWizard,为对话框添加新类TestDlg。

5. 通过ClassWizard,在对话框类中建立按键相应函数OnDialogTest()void CTestDlg::OnButton1(){CMDIFrameWnd *pFrame;CMDIChildWnd *pChild;CView *pView;pFrame =(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd; //获取主窗口指针pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();// 获取子窗口指针pView = pChild->GetActiveView();//获取视类指针if(pView != NULL)pView->PostMessage(WM_MY_MESSAGE,0,0);//发送消息}6. 在Message.h 头文件中添加如下语句:static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");7. 在头文件MessageView.h 中添加消息映射,于DECLARE_MESSAGE_MAP()前面加入:afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);8. 通过ClassWizard- MessageView添加成员变量public: BOOL test;9. 在视类文件MessageView.cpp 中的消息映射中添加自定义消息映射,于END_MESSAGE_MAP()前加入:ON_REGISTERED_MESSAGE(WM_MY_MESSAGE,OnMyMessage)10. 在视类文件MessageView.cpp 中,添加相应的消息处理函数:LRESULT CMessageView::OnMyMessage(WPARAM wParam, LPARAM lParam){CRect rect;GetClientRect(&rect);InvalidateRect(&rect);Test = !test;return 0;}11. 在视类的构造函数OnInitialUpdate()中初始化test 变量:void CMessageView::OnInitialUpdate(){CView::OnInitialUpdate();// TODO: Add your specialized code here and/or call the base classtest=FALSE;}12. 修改CMessageView::OnDraw()函数void CMessageView::OnDraw(CDC* pDC){CMessageDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereif(test)pDC->TextOut(0,0,"消息响应!");}13. 在MessageView.cpp 中包含对话框头文件:#include "TestDlg.h"14. 在OnTest()中添加代码void CMessageView::OnTest(){CTestDlg dlg;dlg.DoModal();}。

VBA 中的自定义对话框设计与使用指南

VBA 中的自定义对话框设计与使用指南

VBA 中的自定义对话框设计与使用指南自定义对话框在VBA编程中经常被用于与用户进行交互,以便获取输入、显示消息或提供选项。

本文将介绍VBA中的自定义对话框的设计和使用指南,以帮助您更好地在VBA编程中使用自定义对话框。

1. 了解VBA中的常见对话框类型VBA中有多种类型的对话框可供选择,例如输入框、提示框、确认框、文件选择框等。

您需要了解每种对话框的特点和使用方法,以便正确选择适合您的需要的对话框类型。

2. 创建自定义对话框在VBA编程中,您可以使用用户窗体(UserForm)来创建自定义对话框。

用户窗体类似于界面设计工具,可以帮助您创建自定义的界面元素,如文本框、标签、按钮等。

通过在用户窗体上添加这些界面元素,您可以实现自定义对话框的功能。

3. 设计自定义对话框界面在设计自定义对话框界面时,您需要注意以下几点:- 界面元素的布局和位置应该合理,以便用户能够直观地理解其功能。

- 文本框、标签等界面元素的命名要具有描述性,方便代码编写和理解。

- 按钮的事件处理过程需要与相应的功能相匹配,确保用户操作的准确性和便捷性。

4. 处理用户输入在自定义对话框中,您经常需要从用户那里获取输入,并对输入进行处理。

VBA提供了各种方法来处理用户输入。

- 获取文本框中的文本:可以使用文本框的Value属性来获取用户输入的文本。

- 获取选择框的选项:可以使用选择框的Value属性来获取用户选择的选项。

- 检查输入的有效性:您可以在代码中对用户输入进行验证,并根据需要显示提示信息或进行警告。

5. 显示消息和提示除了从用户那里获取输入,您可能还需要向用户显示消息和提示。

在自定义对话框中,您可以使用标签或消息框来显示消息和提示。

根据需要,您可以在自定义对话框中添加相关的元素,并在用户执行某些操作时显示消息或提示。

6. 调用和显示自定义对话框在VBA编程中,您可以使用调用对话框的方法来显示自定义对话框。

您可以在代码中使用调用方法,并传递相关的参数,以便显示自定义对话框。

[转]vc自定义消息传送

[转]vc自定义消息传送

[转]vc自定义消息传送发送自定义消息申明:以下用一个自创的对话框类(MyMessageDlg)向视图类(MessageTestView)发送自定义消息为例,申明这两种不合办法的自定义消息的总结:消息传递的办法一:应用ON_MESSAGE应用ON_MESSAGE响应消息,必须共同定义消息#define WM_MY_MESSAGE (WM_USER+100)对于发送消息者-MyMessageDlg,在其MyMessageDlg.h中,定义#define WM_MY_MESSAGE (WM_USER+100)在其MyMessageDlg.cpp中要先添加:#include "MainFrm.h"因为应用了CMainFrame*定义对象。

并且要有测试消息的函数:void MyMessageDlg::OnButtonMsg(){// TODO: Add your control notification handler code hereCMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd; //先经由过程获取当前框架指针CView * active = pMF->GetActiveView();//才干获取当前视类指针if(active != NULL) //获取了当前视类指针才干发送消息active->PostMessage(WM_MY_MESSAGE,0,0); //应用PostMessage发送消息}对于消息的接管者-MessageTestView,在其MessageTestView.h中,也要定义#define WM_MY_MESSAGE (WM_USER+100)并定义消息映射函数-OnMyMessage()protected://{{AFX_MSG(CMessageTestView)afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam);//}}AFX_MSGDECLARE_MESSAGE_MAP()在其MessageTestView.cpp中,先要声明响应消息:BEGIN_MESSAGE_MAP(CMessageTestView, CEditView)//{{AFX_MSG_MAP(CMessageT estView)ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)//}}AFX_MSG_MAP再添加消息响应的函数实现:LRESULT CMessageTestView::OnMyMessage(WPARAM wParam, LPARAM lParam){MessageBox("OnMyMessage!");return 0;}消息传递的办法二:应用ON_REGISTERED_MESSAGE应用ON_REGISTERED_MESSAGE注册消息,必须共同static UINT WM_MY_MESSAGE=RegisterWindowMessage ("Message");对于消息的发送者-MyMessageDlg,在其MyMessageDlg.h中,只要定义static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");就可以了。

C++课后习题

C++课后习题

C++课后习题第一章1.选择题(1) 应用程序向导AppWizard的作用是,通过类向导可以增加消息映射和成员变量。

(2) 项目工作区窗格一般在集成开发环境的左侧,他展示一个项目的几个方面,他们分别是类视图、资源视图和文件视图。

(3)用户可以通过项目工作区窗格的资源视图来查看资源。

(4)项目工作区文件的扩展名为.dsw(5)菜单选择可以通过两种方法来进行:一种是鼠标选择;另一种是键盘选择(6)编译程序的快捷键是Ctrl+F7 ,链接程序的快捷键是F7 ,运行程序的快捷键是Ctrl+F5(7)编译微型条工具栏最右边按钮的功能是Insert/Remove Breakpoint(8)快捷键或菜单及相关资料符号的前缀是IDR2.选择题(1)用应用程序向导AppWizard创建C++源文件,应选择(A )选项卡。

A.FilesB.ProjectsC.WorkspacesD.Other Documents(2)项目文件的扩展名( B )。

A. .exeB. .dspC. .dswD. .cpp(3)Standard 工具栏中最左边按钮与(C )菜单命令的功能一样。

A.NewB.New FileC.New Text FileD.New Workspace(4)Windows资源提供的资料编辑器不能编辑(C )。

A.菜单B.工作栏C.状态栏D.位图3.判断题(1)通过应用程序向导AppWizard建立的程序不能被立即执行。

(×)(2)打开一个项目,只需打开对应的项目工作区文件。

(√)(3)用户可以通过选择T ools | Customize菜单命令设置集成开发环境的工具栏。

(√)(4)在同一项目中,Visual C++在内部用来标识资源的资源符号不能重复。

(√)(5)在Windows环境下,资源与程序源代码紧密相关。

(×)4.简答题(1)什么是项目?它是由什么组成的?(2)解释项目工作区中各个视图的功能。

MFC自定义消息步骤

MFC自定义消息步骤

MFC自定义消息步骤MFC(Microsoft Foundation Classes)是Microsoft公司为Windows平台开发的C++类库,它封装了许多Windows API函数,简化了Windows应用程序的开发过程。

在MFC中,可以使用自定义消息来进行应用程序内部的消息传递。

自定义消息的步骤如下:1. 定义消息常量:首先,在需要使用自定义消息的地方(通常是对话框或视图类中),定义一个用于表示自定义消息的整型常量。

可以使用WM_USER作为基准值,如const UINT WM_MY_MESSAGE = WM_USER + 12. 注册消息:在应用程序启动时,通常在InitInstance函数中,使用CWinApp类的RegisterWindowMessage函数来注册自定义消息,该函数用于获取一个唯一的消息值,如:UINT myMessage = RegisterWindowMessage(LPCTSTR pString).3. 处理消息:在需要处理自定义消息的类中,重写消息处理函数(通常是OnWndMsg函数),根据自定义消息的值,对相应的消息进行处理。

如:BEGIN_MESSAGE_MAP(CMyDialog, CDialog)ON_WM_COPYDATA//...ON_REGISTERED_MESSAGE(myMessage, OnMyMessageHandler)END_MESSAGE_MAPLRESULT CMyDialog::OnMyMessageHandler(WPARAM wParam, LPARAM lParam)//处理自定义消息//...return 0;4. 发送消息:要发送自定义消息,可以使用CWnd类的PostMessage或SendMessage函数。

其中,PostMessage函数用于异步发送消息,而SendMessage函数用于同步发送消息。

(1) 异步发送消息(PostMessage):CWnd* pDestWnd = GetDlgItem(IDC_MY_CONTROL);pDestWnd->PostMessage(myMessage, wParam, lParam);(2) 同步发送消息(SendMessage):CWnd* pDestWnd = GetParent(;pDestWnd->SendMessage(myMessage, wParam, lParam);5.消息映射宏:在使用消息映射宏处理自定义消息时,需要使用ON_REGISTERED_MESSAGE宏,该宏会自动在消息映射表中添加对应的消息处理函数。

VBA实现自定义对话框与用户界面的步骤与技巧

VBA实现自定义对话框与用户界面的步骤与技巧

VBA实现自定义对话框与用户界面的步骤与技巧在VBA编程中,自定义对话框和用户界面是非常重要的部分。

通过自定义对话框,我们可以与用户进行交互,实现一些特定功能。

在本文中,我将提供一些实现自定义对话框和用户界面的步骤和技巧,以帮助你更好地进行VBA编程。

第一步:了解VBA的用户界面对象模型在VBA中,我们可以使用用户界面对象模型来创建自定义对话框和用户界面。

这些对象包括UserForm、Label、TextBox、ComboBox、CommandButton等。

UserForm是一个容器,可以将其他控件放置在其中,从而创建一个完整的用户界面。

第二步:创建一个UserForm首先,打开Visual Basic编辑器(Alt + F11),然后选择“插入”菜单中的“UserForm”,这将创建一个新的UserForm对象。

然后,你可以在该UserForm中添加其他控件。

第三步:设计对话框的布局通过在UserForm中添加和调整控件的位置和大小,你可以设计对话框的布局。

你可以使用Label控件来标识输入框或操作按钮的目的,使用TextBox控件来接收用户的输入,使用ComboBox控件来提供下拉选择等。

第四步:为控件添加事件处理程序每个控件都可以触发不同的事件,例如按钮的单击事件或文本框的更改事件。

通过为控件添加事件处理程序,你可以为用户的操作提供相应的响应。

例如,当用户单击按钮时,你可以在事件处理程序中执行特定的操作。

第五步:使用VBA代码与控件进行交互在VBA中,你可以使用代码与创建的控件进行交互。

代码可以读取和更改控件的属性,例如文本框中的文本或标签中的标题。

你还可以使用代码来判断用户的操作,并采取相应的措施。

第六步:显示和隐藏对话框当你创建了一个自定义对话框后,你需要使用VBA代码来显示它。

你可以通过调用UserForm对象的“Show”方法来显示对话框,并使用“Hide”方法来隐藏它。

你还可以使用“Unload”方法来卸载对话框。

MFC用户自定义消息SendMessage的使用

MFC用户自定义消息SendMessage的使用

用户自定义消息SendMessage的使用这里主要讲一下mfc中SendMessage的使用方法。

传递消息主要分4步:1.在类的定义中声明消息函数:afx_msg void AAA();2.在相应的cpp文件中的MESSAGE_MAP区域内添加ON_MESSAGE(MESSAGE_ID,AAA),其中参数1为要传递消息的ID,参数2为刚刚声明的函数名称,不用带括号。

3.实现消息函数:在cpp文件中添加LRESULT 类名::AAA(WPARAM wparam,LPARAM lparam){执行内容……return 0;}4.发送消息:在需要发送消息的地方添加下列语句:HWND hWnd = ::FindWindowEx( m_hWnd, NULL, NULL, WINDOW_TEXT ) ;FromHandle(hWnd)->SendMessage(MESSAGE_ID,a,b);其中,m_hWnd为接收消息的父窗口的句柄,WINDOW_TEXT为接收消息窗口的标题,得到的hWnd为接收消息窗口的句柄。

调用该窗口的SendMessage 函数,MESSAGE_ID为刚刚设定的消息ID,a和b是要传递的参数。

注:在这4个步骤中,前三个我在做的时候基本没什么障碍。

问题主要出现在第4步。

开始找到网上的例子给的都是FindWindow函数,怎么用都不好使。

后来看到有人说FindWindow是找操作系统下打开的窗口的句柄,找窗口中子窗口要用FindWindowEx函数。

我也尝试过用对话框的ID找到相应的句柄,像GetDlgItem(ID)函数一样,未果。

我使用的对话框都是没有标题栏的,所以也就没有窗口的标题,当然这并不会影响我设置标题。

只要在生成该窗口的区域内添加SetWindowText(“窗口标题”)就可以了。

也就是说窗口标题可以设置,但是不会显示。

最后一点在SendMessage()函数中,MFC默认传递的参数是WPARAM和LPARAM型(一个是UINT型,一个LONG型),如果要传递浮点类型,或者其它不是整数的类型,就可以用指针的形式传递(如果发送方只是申请一个变量并以地址的形式传递,然后接收方以指针的形式接收,如果在执行完SendMessage 之后原函数体立即结束了,我不知道在接收函数体接收和使用该变量的之间的一瞬间,该内存区域会不会被占用,我觉得还是有这种可能的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VC中自定义消息的方法
以下用一个自创的对话框类(MyMessageDlg)向视图类(MessageTestView)
发送自定义消息为例,说明这两种不同方法的自定义消息的
消息传递的方法一:使用ON_MESSAGE
使用ON_MESSAGE响应消息,必须配合定义消息#define WM_MY_MESSAGE (WM_USER+100) 对于发送消息者-MyMessageDlg,
在其MyMessageDlg.h中,定义#define WM_MY_MESSAGE (WM_USER+100)
在其MyMessageDlg.cpp中要先添加:#i nclude "MainFrm.h"
因为使用了CMainFrame*定义对象。

并且要有测试消息的函数:
void MyMessageDlg::OnButtonMsg()
{
// TODO: Add your control notification handler code here
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd; //先通过获取当前框架指针CView * active = pMF->GetActiveView();//才能获取当前视类指针
if(active != NULL) //获取了当前视类指针才能发送消息
active->PostMessage(WM_MY_MESSAGE,0,0); //使用PostMessage发送消息
}
对于消息的接受者-MessageTestView,
在其MessageTestView.h中,也要定义#define WM_MY_MESSAGE (WM_USER+100)
并定义消息映射函数-OnMyMessage()
protected:
//{{AFX_MSG(CMessageTestView)
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
在其MessageTestView.cpp中,
先要声明响应消息:
BEGIN_MESSAGE_MAP(CMessageTestView, CEditView)
//{{AFX_MSG_MAP(CMessageTestView)
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
//}}AFX_MSG_MAP
再添加消息响应的函数实现:
LRESULT CMessageTestView::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
MessageBox("OnMyMessage!");
return 0;
}
消息传递的方法二:使用ON_REGISTERED_MESSAGE
使用ON_REGISTERED_MESSAGE注册消息,必须配合
static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
对于消息的发送者-MyMessageDlg,
在其MyMessageDlg.h中,只要
定义static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
就可以了。

在其MyMessageDlg.cpp中要先添加:#i nclude "MainFrm.h"
因为使用了CMainFrame*定义对象。

并且要有测试消息的函数:
void MyMessageDlg::OnButtonMsg()
{
// TODO: Add your control notification handler code here
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd; //先通过获取当前框架指针CView * active = pMF->GetActiveView();//才能获取当前视类指针
if(active != NULL) //获取了当前视类指针才能发送消息
active->PostMessage(WM_MY_MESSAGE,0,0); //使用PostMessage发送消息
}
对于消息的接收者-MessageTestView,
在其MessageTestView.h中不要定义
static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
应该把这个定义放到MessageTestView.cpp中,要不会出现: redefinition
在其MessageTestView.h中只要定义消息映射函数
protected:
//{{AFX_MSG(CMessageTestView)
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
在其MessageTestView.cpp中,先定义
static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
接着注册消息:
BEGIN_MESSAGE_MAP(CMessageTestView, CEditView)
//{{AFX_MSG_MAP(CMessageTestView)
ON_REGISTERED_MESSAGE(WM_MY_MESSAGE,OnMyMessage)
//}}AFX_MSG_MAP
最后添加消息响应的函数实现:
LRESULT CMessageTestView::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
MessageBox("OnMyMessage!");
return 0;
}
----------------------------------------------------------------
比较两种方法,只是略有不同。

但也要小心谨慎,以免出现接收不到消息的情况。

-------------------------------------------------------------------
其他注意事项:
发送消息的-MyMessageDlg.cpp前也要定义
static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
接受消息的-MessageTestView.cpp前也要定义
static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message"); RegisterWindowMessage("Message")中""的内容是什么不重要,写什么都可以,但是发送者与接受者必须是一样的内容,例如:"Message"
转自:/xpzhou/archive/2007/04/18/22185.html。

相关文档
最新文档