VC++手动添加命令消息处理函数实例操作

合集下载

VC++实验六MFC消息映射编程实验

VC++实验六MFC消息映射编程实验

一、实验目的(1) 熟悉Visual C++ 6.0开发环境;(2) 掌握消息映射机制的基本原理和手工添加消息映射的方法;(3) 熟练掌握在Visual C++ 6.0开发环境调试程序的方法。

二、实验内容设计MFC应用程序,手工添加消息映射,实现下面的功能:(1)按下CTRL键,拖动鼠标绘制矩形;(2)按下SHIFT键,拖动鼠标绘制椭圆。

三、总结手工添加消息映射的基本步骤:1、在 BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP之间添加消息映射宏;BEGIN_MESSAGE_MAP(CDemoView, CView)ON_MESSAGE(WM_LBUTTONDOWN, OnLButtonDown)ON_COMMAND(ID_OPER_TEST, OnOperTest)END_MESSAGE_MAP( )2、在类声明中声明成员函数;3、在类的实现部分实现成员函数。

四:列出鼠标绘图功能的实现代码:头文件为:#include "afxwin.h"class CDrawWnd:public CFrameWnd{public:CDrawWnd();~CDrawWnd();public:int x0,y0,x1,y1;void OnMouseMove(WPARAM wParam, LPARAM lParam);void OnLButtonDown(WPARAM wParam, LPARAM lParam);DECLARE_MESSAGE_MAP()};class CDrawApp:public CWinApp{public:BOOL InitInstance();};CDrawApp theApp;源文件:#include "Draw.h"BEGIN_MESSAGE_MAP(CDrawWnd, CFrameWnd)ON_MESSAGE(WM_MOUSEMOVE,OnMouseMove) ON_MESSAGE(WM_LBUTTONDOWN,OnLButtonDown) END_MESSAGE_MAP()CDrawWnd::CDrawWnd(){static int x0 = 0;static int y0 = 0;static int x1 = 0;static int y1 = 0;}CDrawWnd::~CDrawWnd(){}void CDrawWnd::OnMouseMove(WPARAM wParam, LPARAM lParam){CClientDC dc(this);CPen hp,*pOldPen,hp1;hp.CreatePen(PS_SOLID,3,RGB(255,0,0));pOldPen=dc.SelectObject(&hp);CPoint point [3];point [0] = CPoint(x0,(y0+y1)/2);point [1] = CPoint(x0,y0);point [2] = CPoint((x0+x1)/2, y0);if((wParam & MK_CONTROL) && (wParam & MK_LBUTTON)) //按下ctrl键,拖动鼠标绘制矩形{dc.Rectangle(x0,y0,x1,y1);}if((wParam & MK_SHIFT) && (wParam & MK_LBUTTON))//按下shift键,拖动鼠标绘制椭圆{dc.Rectangle(x0,y0,(x0+x1)/2,(y0+y1)/2);hp1.CreatePen(PS_SOLID,3,RGB(255,255,255));pOldPen=dc.SelectObject(&hp1);dc.Polyline(point, 3);dc.SelectObject(pOldPen);dc.Ellipse(x0,y0,x1,y1);}x1= LOWORD(lParam);y1 = HIWORD(lParam);}void CDrawWnd::OnLButtonDown(WPARAM wParam, LPARAM lParam){x0 =x1= LOWORD(lParam);y0=y1= HIWORD(lParam);}BOOL CDrawApp::InitInstance(){CDrawWnd *pFrame = new CDrawWnd();pFrame->Create(0,_T("MFC消息映射编程实验"));pFrame->ShowWindow(m_nCmdShow);this->m_pMainWnd = pFrame;return TRUE;}。

VC对话框如何添加WM_ERASEBKGND消息-OnEraseBkgnd函数

VC对话框如何添加WM_ERASEBKGND消息-OnEraseBkgnd函数

VC对话框如何添加WM_ERASEBKGND消息(OnEraseBkgnd函数)
1、首先,为了下面使用擦除背景的方便,先增加OnEraseBkgnd函数(WM_ERASEBKGND),但好多新手都不知道对话框在那里找增加这个函数,来跟我来
快捷键Ctrl+W打开ClassWizard对话框(菜单->view->ClassWizard):选择Class Info,找到左下角的Message filter,下拉列表至最底部,选中Window,OK保存
2、我们再Ctrl+W 打开ClassWizard对话框,MessageMaps->Class Name:选择当前工程对话框->Object IDs:选择当前对话框->Messages:下拉找吧,WM_ERASEBKGND有了吧,双击或者Add Function,添加到下面的Member functions后,再双击就可以编辑此函数代码了
3、当然除了以上的方法之外,如果对代码结构基本了解的话,还可以自己手动增加:
a、工程的头文件中增加擦出背景函数定义
afx_msg BOOL OnEraseBkgnd(CDC *pDC);
b、增加消息响应
BEGIN_MESSAGE_MAP(C******Dlg, CDialog) // C******Dlg是你自己对话框的工程类……
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()
c、工程源文件cpp中增加此函数的操作部分
BOOL CDisplayBmpBackGroundDlg::OnEraseBkgnd(CDC *pDC)
{
//在这里你想增加那些对图片背景处理的东西就随便填吧 return TRUE;
}。

【初学VC讲稿】第4篇:自定义消息处理示例

【初学VC讲稿】第4篇:自定义消息处理示例
::PostMessage(hWnd,WM_USERMSG,0,0);
CView::OnRButtonDown(nFlags, point);
}
[7]在CMyDefMsgView类的OnDraw()函数中加入pDC->TextOut(0,0,"按下鼠标右键,测试自定义消息!");
{
}
【完成程序】
[1]生成单文档应用程序MyDefMsg,其余均默认。
[2]定义用户消息
将"const WM_USERMSG = WM_USER + 10"加入到" MyDefMsgView.h"中CMyDefMsgView类的声名的上面
const WM_USERMSG = WM_USER + 10
3. 第[6]部分不是直接调用OnMyFunction(),用SendMessage(WM_USERMSG, NULL, NULL);
不好意思啊,我看的不全,发表垃圾评论了,大家包涵.
致歉 回复此评论 修改评论 发表新评论
王辉 2003-11-20
首先向大家致歉,由于我的疏忽在【完成程序】的第[6]步中,
END_MESSAGE_MAP()
[6]编写发送自定义消息的代码
首先按照上篇介绍的方法,为CMyDefMsgView类加入WM_RBUTTONDOWN消息,在WM_RBUTTONDOWN消息的处理函数OnRButtonDown(UINT nFlags, CPoint point)中加入发送自定义消息的代码:
《一》再次对我的疏忽表示歉意!!!
《二》谢谢Bugzilla的一起讨论!!!
《三》关于WM_USER

vs2013vc自定义函数的解释说明

vs2013vc自定义函数的解释说明

vs2013vc自定义函数的解释说明
VS2013VC是指Visual Studio 2013中的Visual C++开发环境。

在该环境中,你可以创建自定义函数来实现你所需要的功能。

自定义函数是一种有特定功能的代码块,可以接受输入参数并返回一个值。

它可以帮助你在程序中组织重复的代码、提高代码的复用性和可读性。

在VS2013VC中创建自定义函数的步骤如下:
1. 打开Visual Studio 2013,选择新建项目。

2. 选择Visual C++,然后选择你所需要的项目类型(如控制台应用程序、Windows桌面应用程序等),填写项目名称和保存路径,点击确定。

3. 在生成的项目文件中,找到源文件,一般是以.cpp为扩展名的文件,双击打开。

4. 在源文件中,找到你希望添加自定义函数的位置,可以在函数之外定义自己的函数,也可以在主函数之前或之后。

5. 写下函数的定义,包括函数的返回类型、函数名、参数列表和函数体。

例如:
```
int Add(int a, int b)
{
return a + b;
}
```
6. 在需要调用该函数的地方,使用函数名和参数列表来调用该函数。

例如:
```
int result = Add(5, 3);
```
以上就是使用VS2013VC创建和使用自定义函数的基本步骤。

你可以根据实际需求自定义更多的函数来实现不同的功能。

记得在编写自定义函数时考虑参数类型和返回值类型的匹配关系,以及在函数内部实现所需的业务逻辑。

C++vc中怎么使用SendMessage自定义消息函数

C++vc中怎么使用SendMessage自定义消息函数

C++vc中怎么使⽤SendMessage⾃定义消息函数vc中怎么使⽤SendMessage⾃定义消息函数:SendMessage的基本结构如下:SendMessage(HWND hWnd, //消息传递的⽬标窗⼝或线程的句柄。

UINT Msg, //消息类别(这⾥可以是⼀些系统消息,也可以是⾃⼰定义,下⽂具体介绍,)WPARAM wParam, //参数1 (WPARAM 其实是与UINT是同种类型的,//在vc编译器中右键有个“转到WPARAM的定义”的选项可以查看。

LPARAM lParam); //参数2其中⼀些参数的由来如下://typedef unsigned int UINT;//typedef UINT WPARAM;//typedef LONG LPARAM;//typedef LONG LRESULT;例如可以⽤以下语句:::SendMessage(this->m_hWnd, WM_MY_DOSOME, (WPARAM) 0, (LPARAM) 0);这⾥我发送的消息是本窗体接收的,所以句柄⽤:this->m_hWnd这⾥的消息类别WM_MY_DOSOME就是我⾃定义的,在接收消息的窗体或线程所在的头⽂件⾥:#define WM_MY_DOSOME WM_USER+1 // do something当然你还可以定义更多如:#define WM_DOOTHER WM_USER+2 // do other表⽰要做⼀些事情。

到这⾥,可能⼤家还是对消息类别有点模糊,不要担⼼,我下⾯很快就讲到。

我们发了⼀个消息出去,那么接收⽅要能识别这个消息是⼲什么,就是通过消息类别来区分,并且开始去做这个消息对应要处理的事情。

如下:⼀:编写⼀个事情:我们在接收窗体⾥定义⼀个这样的事情(过程),afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2){MessageBox("收到消息了,我要开始做⼀些事情了。

如何用VC创建及调用DLL

如何用VC创建及调用DLL

如何用VC创建及调用DLL使用Visual C++(VC++)创建和调用动态链接库(DLL)可以提供一种模块化的方式来组织和重用代码。

本文将介绍如何使用VC++创建DLL,并在另一个VC++项目中调用该DLL。

创建DLL以下是使用VC++创建DLL的步骤:1.打开VC++,在“文件”菜单中选择“新建”->“项目”。

2. 在“新建项目”对话框中,选择“Win32控制台应用程序”。

点击“下一步”。

3.输入项目名称,并选择项目位置,点击“下一步”。

4.在“应用程序类型”对话框中,选择“DLL”并取消勾选“预编译头”。

点击“下一步”。

5.在“进入代码”对话框中,选择“空项目”。

点击“完成”。

6. 创建一个新的源文件,例如“MyDLL.cpp”。

7. 在“MyDLL.cpp”中,编写所需的函数并导出。

例如:```C++#include <Windows.h>// 导出的函数需要使用__declspec(dllexport)修饰extern "C" __declspec(dllexport) int AddNumbers(int a, int b) return a + b;```8. 在项目属性中,选择“链接器”->“高级”,将“入口点”设置为“DllMain”。

9.在“生成”菜单中选择“生成解决方案”,以生成DLL文件。

以下是在VC++项目中调用DLL的步骤:1.打开VC++,在“文件”菜单中选择“新建”->“项目”。

2. 在“新建项目”对话框中,选择“Win32控制台应用程序”。

点击“下一步”。

3.输入项目名称,并选择项目位置,点击“下一步”。

4.在“应用程序类型”对话框中,选择“控制台应用程序”并取消勾选“预编译头”。

点击“下一步”。

5.在“附加选项”对话框中,勾选“空项目”。

点击“完成”。

6.将之前生成的DLL文件复制到新项目的文件夹中。

7.在项目属性中,选择“C/C++”->“常规”,将“附加包含目录”设置为包含DLL文件的文件夹路径。

visual c++ mfc扩展编程实例

visual c++ mfc扩展编程实例

visual c++ mfc扩展编程实例MFC(Microsoft Foundation Class)是Microsoft提供的一个C++类库,它封装了Windows API,使得开发者可以更方便地使用Windows平台的各种功能。

下面是一个简单的Visual C++ MFC扩展编程实例,演示如何创建一个简单的窗口并显示文本。

1. 打开Visual Studio,创建一个新的MFC应用程序项目。

2. 在项目属性中,将“应用程序类型”设置为“MFC应用程序”。

3. 在“源文件”文件夹中,打开“CMyApp”类。

4. 在“CMyApp”类的“OnInitDialog”函数中,添加以下代码:```cppBOOL CMyApp::OnInitDialog(){CMainDialog::OnInitDialog();// 设置窗口标题SetWindowText(_T("MFC扩展编程实例"));// 创建文本控件CWnd* pWnd = GetDlgItem(IDC_STATIC_TEXT);ASSERT(pWnd);CRect rect;pWnd->GetWindowRect(&rect);CString strText;strText.Format(_T("Hello, MFC!"));pWnd->SetWindowText(strText);return TRUE; // 返回TRUE 除非你对WM_COMMAND 设置了一个处理函数}```5. 在“头文件”文件夹中,打开“CMyApp”类的头文件“CMyApp.h”。

6. 在“CMyApp”类中添加一个成员变量:```cppCStatic m_StaticT ext; // 文本控件成员变量```7. 在“CMyApp”类的构造函数中,初始化该成员变量:```cppCMyApp::CMyApp() : CMainDialog(CMyApp::IDD){// 初始化成员变量m_StaticText.SubclassDlgItem(IDC_STATIC_TEXT, this); // 绑定控件ID 和窗口句柄}```。

关于VC++中两种自定义消息的发送与接收的方法实现进行说明

关于VC++中两种自定义消息的发送与接收的方法实现进行说明

在MFC中添加用户自定义消息首先弄清楚两点:(1)谁要发送这个消息(2)谁要接受这个消息。

用一个简单的例子来说明。

对象A向B(也可以就是A到A)发送消息。

1 发送消息首先在A的头文件中定义这个消息:#define WM_USERMESSAGE WM_USER+30所有自定义消息都是以WM_USER消息为基础加上一个任意的自然数来表示的。

A是向外发送消息的对象,因此在A的某个方法(函数)里就会调用用来发消息的函数B::SendMessage()/B::PostMessage(),因为是B接受消息,因此是如上的形式。

2 接受消息对象接受一个消息,应该有三部分:在头文件中有该消息的处理函数的原型;在实现文件中有接受消息映射的宏;以及该消息的处理函数的具体实现。

2.1 头文件中加上自定义消息的处理函数原型在DECLARE_MESSAGE_MAP()语句之前,一对AFX_MSG之间加上如下形式的函数原型:afx_msg LRESULT OnProcName( WPARAM wParam, LPARAM lParam );对Win32来说,wParam, lParam是传递消息最常用的手段。

2.2 在实现文件中加上接受消息映射的宏在cpp文件里,BEGIN_MESSAGE_MAP语句之后,在一对AFX_MSG_MAP之间,增加如下形式的代码:ON_MESSAGE(WM_USERMESSAGE, OnProcName)上面是不用分号结尾的。

2.3 在实现文件中给出消息处理函数的具体实现。

发信人: Amia (小羊·橘子·和中南海有缘), 信区: VisualC标题: MFC中自由使用自定义消息发信站: 哈工大紫丁香(2003年11月26日07:45:34 星期三), 站内信件消息映射、循环机制是Windows程序运行的基本方式。

V C++MFC 中有许多现成的消息句柄,可当我们需要完成其它的任务,需要自定义消息,就遇到了一些困难。

VC++_CMSComm例程1

VC++_CMSComm例程1
// TODO: Add extra initialization here if(m_ctrlComm.GetPorttOpen(FALSE);
m_ctrlComm.SetCommPort(1); //选择 com1 if( !m_ctrlComm.GetPortOpen())
5.添加串口事件消息处理函数 OnComm()
打 开 ClassWizard - >Message Maps , 选 择 类 CSCommTestDlg , 选 择 IDC_MSCOMM1,双击消息 OnComm,将弹出的对话框中将函数名改为 OnComm。
这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收 数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们在 OnComm()函数 加入相应的处理代码就能实现自已想要的功能了。请你在函数中加入如下代码:
打开 ClassWizard->Member Viariables 选项卡,选择 CSCommTestDlg 类,为 IDC_MSCOMM1 添加控制变量:m_ctrlComm,这时你可以看一看,在对话框头文件中 自动加入了//{{AFX_INCLUDES() #include "mscomm.h" //}}AFX_INCLUDES 。
4.在对话框中添加控件 向主对话框中添加两个编辑框,一个用于接收显示数据 ID 为 IDC_EDIT_RXDATA,
另一个用于输入发送数据,ID 为 IDC_EDIT_TXDATA,再添加一个按钮,功能是按一次 就把发送编辑框中的内容发送一次,将其 ID 设为 IDC_BUTTON_MANUALSEND。别忘 记了将接收编辑框的 Properties->Styles 中把 Miltiline 和 Vertical Scroll 属性选上, 发送编辑框若你想输入多行文字,也可选上 Miltiline。

C语言命令行简明教程

C语言命令行简明教程

C语言命令行简明教程C语言作为一种被广泛应用于系统开发、嵌入式领域以及科学计算等领域的编程语言,具有高效、灵活和强大的特点。

其中,命令行编程是C语言最常用的方式之一。

本教程将向您介绍C语言命令行编程的基础知识和常用方法。

一、什么是命令行编程在计算机编程中,命令行编程是指通过命令行界面(Command Line Interface)输入指令和参数来与计算机进行交互的一种编程方式。

C语言提供了与命令行交互的函数和库,方便程序员开发各种应用程序。

二、命令行参数的获取在C语言中,通过main函数的参数来获取命令行参数。

main函数的原型如下:```int main(int argc, char *argv[])```其中,argc表示命令行参数的数量,argv是一个指向字符串数组的指针,每个字符串表示一个命令行参数。

下面是一个示例:```c#include <stdio.h>int main(int argc, char *argv[])int i;for(i=0; i<argc; i++){printf("参数%d: %s\n", i, argv[i]);}return 0;}```在上面的示例中,我们使用了一个循环来遍历所有命令行参数,并通过printf函数将其输出到屏幕上。

三、标准输入输出C语言提供了标准输入输出库(stdio.h),可以通过命令行进行输入输出操作。

常用的函数包括printf、scanf和getchar等。

1. printf函数printf函数用于向屏幕输出内容。

下面是一个示例:```c#include <stdio.h>int main()int num = 10;printf("数字: %d\n", num);return 0;}```在上面的示例中,我们使用了printf函数将num的值输出到屏幕上。

2. scanf函数scanf函数用于从命令行获取输入,并将其存储到变量中。

VC动态创建对话框和按钮、消息响应

VC动态创建对话框和按钮、消息响应

VC动态创建对话框和按钮、消息响应vc 动态创建对话框和按钮、消息响应1.创建非模态对话框:类*对象=new 类BOOL 对象->Create(ID,this);创建后需调用ShowWindow函数将对话框显示出来对象->ShowWindow(SW_SHOW);在非模态对话框中点击确定和取消时,对话框并不销毁,而是隐藏起来,要想销毁,需调用DestroyWindow函数2.动态创建按钮:方法1为要加按钮的类添加一个私有的CButton成为变量m_btn,还要添加一个BOOL 型的私有成员量m_bIsCreated用来确定是否创建了按钮if(m_blsCreated==FALSE)////判断如果没有创建按钮{m_btn.Create("new",/////按钮上显示的文本BS_DEFPUSHBUTTON|WS_VISIBLE|WS_CHILD,///如果没有制定WS_VISIBLE还要调用ShowWindow将其显示出来CRect(0,0,100,100),/////左上角的坐标(0,0),长度为100,100 this,123);ID地址为123m_blsCreated=TRUE;}else{m_btn.DestroyWindow();m_blsCreated=false;}方法2用CWnd类的成员对象m_hWnd用来保存与窗口对象相关联的窗口句柄,如果窗口对象没有与任何窗口相关联,该值为NULL if(!m_btn.m_hWnd){m_btn.Create("new",BS_DEFPUSHBUTTON|WS_VISIBLE|WS_ CHILD,CRect(0,0,100,100),thi s,123);m_blsCreated=TRUE;}else{m_btn.DestroyWindow();m_blsCreated=false;}按钮的动态创建,及添加消息响应函数btn3 = new CButton();btn3->Create("按钮3",BS_PUSHBUTTON|WS_VISIBLE|WS_CHILD,CRect(250,250,320,270),this,10003);其中最后一个参数10003,是ID号,一定要大于100,因为100以内为VC编译系统使用.按钮消息响应(1) 先在CMy12View类中加入afx_msg void PushButton3();(2) 加入消息函数对应代码BEGIN_MESSAGE_MAP(CMy12View, CView)ON_BN_CLICKED(10003, PushButton3)END_MESSAGE_MAP()(3) 编写PushButton3()void CMy12View::PushButton3(){AfxMessageBox("Button3 is pushed!");//MessageBeep(-1);}//不用在CMy12View.h中定义:public:void CMy12View::PushButton3()。

visual c++ ipc 消息队列 应用案例详解

visual c++ ipc 消息队列 应用案例详解

visualc++ipc消息队列应用案例详解一、概述IPC(Inter-ProcessCommunication,进程间通信)是不同进程之间进行信息交换的重要手段。

在C++中,使用消息队列作为IPC的一种方式,可以有效地在不同的进程之间传递数据。

本文将通过一个具体的应用案例,对visualC++中的IPC消息队列进行详解。

二、消息队列的创建与使用1.创建消息队列:在VisualC++中,可以使用`mq_open`函数创建一个消息队列,并指定队列的名称和属性。

例如:`mq_t*msg_queue=mq_open(name,O_CREAT|O_RDWR,0666,attrs);`2.发送消息:使用`mq_send`函数向消息队列发送消息。

例如:`mq_send(msg_queue,msg_ptr,len,0);`3.接收消息:使用`mq_receive`函数从消息队列接收消息。

例如:`msg_ptr=mq_receive(msg_queue);`4.关闭消息队列:使用`mq_close`函数关闭已打开的消息队列。

例如:`mq_close(msg_queue);`三、应用案例以下是一个简单的应用案例,用于演示如何使用IPC消息队列实现不同进程之间的通信。

假设有两个进程:一个是服务器进程,负责接收客户端的请求;另一个是客户端进程,负责向服务器发送请求并接收响应。

1.服务器进程创建消息队列,并监听指定的端口号。

当收到客户端的请求时,将请求信息放入消息队列中。

2.客户端进程通过socket连接到服务器进程,并向其发送连接请求。

当收到连接请求后,服务器进程从消息队列中取出请求信息,并返回响应给客户端进程。

3.客户端进程接收到响应后,将其解析并显示给用户。

四、注意事项1.确保消息队列的名称和属性正确,避免出现重名或无法访问的情况。

2.在发送和接收消息时,要确保数据的完整性和正确性,避免出现数据丢失或损坏的情况。

VcMFC中自定义消息及其PostMessage触发使用

VcMFC中自定义消息及其PostMessage触发使用

VcMFC中自定义消息及其PostMessage触发使用转载请注明文章:VC++/MFC中自定义消息及其PostMessage消息函数使用出处:多客博图如何在VC++中加入自定义消息,我的做法:这里我以一个对话框为例子,环境:VS 2008,新建一个工程,选择对话框:以编译器给出的对话框为蓝本,自己新建一个按钮如图:把名字改成如图的,其他比如ID什么的都不改了,默认。

1 首先在ownermessageDlg.h中定义消息:例如define WM_MYMESSAGE (WM_USER+100)2 在ownermessageDlg.h的文件中 class 的public,加入消息响应函数,如:afx_msg LRESULT OnMyMessage(WPARAM w,LPARAM l);该函数有规定的格式:afx_msg LRESULT Function_Name(WPARAM w,LPARAM l);3 在ownermessageDlg.cpp中加入消息响应宏在响应该消息的类中,在消息响应块中,BEGIN_MESSAGE_MAP(CownermessageDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAPEND_MESSAGE_MAP()加入以下语句:ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)成为如下样式:BEGIN_MESSAGE_MAP(CownermessageDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)//}}AFX_MSG_MAPEND_MESSAGE_MAP()4 在.CPP文件中,编辑消息响应函数,如下:LRESULT CownermessageDlg::OnMyMessage(WPARAM wParam, LPARAM lParam) {MessageBox(_T("My Message!"));return 1;}5.在对话框中为新增的按钮添加单击响应,ownermessageDlg.cpp中的MESSAGE_MAP自动变成:BEGIN_MESSAGE_MAP(CownermessageDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)//}}AFX_MSG_MAPON_BN_CLICKED(IDC_BUTTON1, &CownermessageDlg::OnBnClickedButton1)END_MESSAGE_MAP()void CownermessageDlg::OnBnClickedButton1(){// TODO: Add your control notification handler code here//::PostMessage(PostMessage(WM_MYMESSAGE, IDC_BUTTON1);}PostMessage(……)这个就是响应WM_MYMESSAGE消息的,其实这样写也是可以的:PostMessage(WM_MYMESSAGE);我们来看看这个消息的函数原型:在CWnd::PostMessage中定义BOOL PostMessage (UINT message,WPARAM wParam = 0,LPARAM lParam = 0);Parameters:messageSpecifies the message to be posted.wParamSpecifies additional message information. The content of this parameter depends on the message being posted.lParamSpecifies additional message information. The content of this parameter depends on the message being posted.Return ValueNonzero if the message is posted; otherwise 0.所以一般的当点击时,消息触发就会发送一个WM_MYMESSAGE消息,故而调用CownermessageDlg::OnMyMessage(WPARAM wParam, LPARAM lPa ram)这个函数。

怎么给VS的main函数传递参数

怎么给VS的main函数传递参数

怎么给VS的main函数传递参数在 Visual Studio 中,可以通过命令行参数或调试器来给 main 函数传递参数。

下面将详细介绍两种方法。

方法一:通过命令行参数传递1. 打开 Visual Studio。

2.创建一个新的控制台应用程序项目。

3.在解决方案资源管理器中,右击项目并选择“属性”。

4.在属性窗口中,选择“调试”选项卡。

5. 在“命令行参数”文本框中输入要传递给 main 函数的参数。

可以使用空格或逗号将多个参数分隔开。

6.单击“应用”按钮保存更改。

现在,当你运行程序时,main 函数将可以接收到传递的参数。

你可以在代码中使用 `argc` 和 `argv` 参数来访问这些参数。

下面是一个示例:```cpp#include <iostream>int main(int argc, char* argv[])for (int i = 0; i < argc; i++)std::cout << "参数" << i << ": " << argv[i] << std::endl;}return 0;```在执行程序时,可以在命令行中输入参数,比如:```bashprogram.exe 参数1 参数2 参数3```程序将输出:```参数0: program.exe参数1:参数1参数2:参数2参数3:参数3```方法二:通过调试器传递1. 打开 Visual Studio。

2.创建一个新的控制台应用程序项目。

3.在解决方案资源管理器中,右击项目并选择“属性”。

4.在属性窗口中,选择“调试”选项卡。

5. 在“命令行参数”文本框中输入要传递给 main 函数的参数。

可以使用空格或逗号将多个参数分隔开。

6.单击“应用”按钮保存更改。

现在,你可以调试程序,并在调试器中设置传递给 main 函数的参数。

vc++ 编程实例

vc++ 编程实例

以下是一个简单的VC++编程实例,它演示了如何使用VC++创建一个Windows应用程序,并在其中添加一个按钮和一个文本框。

1. 打开Visual Studio并创建一个新的Windows应用程序项目。

2. 在“解决方案资源管理器”中,右键单击项目并选择“添加”->“新建项”。

3. 在“添加新项”对话框中,选择“Windows窗体”并命名为“Form1”。

4. 在Form1的设计视图中,从工具箱中拖动一个按钮和一个文本框控件到Form1上。

5. 双击按钮控件以生成其单击事件处理程序。

6. 在按钮的单击事件处理程序中,编写以下代码:
```c++
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
// 在文本框中显示按钮的文本
textBox1->Text = "你点击了按钮";
}
```
7. 保存并编译项目。

这个应用程序将在运行时显示一个包含按钮和文本框的窗口。

当用户单击按钮时,文本框将显示消息“你点击了按钮”。

VC++API常用函数例子大全[转载]

VC++API常用函数例子大全[转载]

VC++API常⽤函数例⼦⼤全[转载]第⼀个:FindWindow根据窗⼝类名或窗⼝标题名来获得窗⼝的句柄,该函数返回窗⼝的句柄函数的定义:HWND WINAPI FindWindow(LPCSTR lpClassName ,LPCSTR lpWindowName);第⼀个参数填窗⼝的类名,第⼆个填窗⼝的标题名,其实是不需要同时填两个参数的,也就是说,你只要知道窗⼝的类名或窗⼝的标题就可以了,没有的那个就⽤NULL代替。

⽐如现在有⼀个窗⼝名为"⽆标题.txt - 记事本"的记事本程序。

那么我就可以⽤上⾯的函数获得这个窗⼝的句柄,那获得了这个窗⼝的句柄我可以⼲什么呢?作⽤可⼤了,因为很多操作窗⼝的函数,都需要窗⼝句柄作参数,如移动、改变窗⼝⼤⼩的MoveWindow函数,在这⾥举个例⼦,⼤家就更能体会到这个FindWindow的⽤法、⽤处。

FindWindow例⼦:已知⼀个窗⼝名称,写⼀个程序关闭该窗⼝,假设当前电脑正有⼀个窗⼝名为"⽆标题.txt - 记事本"的记事本程序运⾏#include<windows.h> //API函数的头⽂件int main(){HWND wnd; //定义⼀个窗⼝句柄变量,⽤以存储找到的窗⼝句柄wnd=FindWindow(NULL,"⽆标题.txt - 记事本"); //获得窗⼝名为"⽆标题.txt - 记事本"的窗⼝句柄SendMessage(wnd,WM_CLOSE,0,0); //调⽤SendMessage函数,发送⼀个WM_CLOSE(关闭)消息给wnd窗⼝句柄。

return 0;}如果要根据窗⼝类名来获得窗⼝句柄话,只要给函数的第⼀个参数填类名,第⼆个参数窗⼝名填NULL,即可,⽤Spy++可查看窗⼝类名。

第⼆个:SendMessage根据窗⼝句柄发送⼀个消息给窗⼝函数定义:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);第⼀个参数是窗⼝句柄,第⼆参数个是消息类型,下⾯的消息表列举了所有消息,第三,四个参数是消息附带信息,解释依赖于消息类型,⽐如⼀个字符消息(WM_CHAR),那么第三个参数就储存有⼀个字符的ASCII码。

VC++命令行操作

VC++命令行操作

VC++命令行操作cl.exe所在的文件夹里面有一个批处理叫做VSVAR32.BAT首先运行它一次,你就可以用cl.exe来编译你的代码了。

CL.exe 是控制Microsoft C 和C++ 编译器与链接器的32 位工具。

编译器产生通用对象文件格式(COFF) 对象(.obj) 文件。

链接器产生可执行文件(.exe) 或动态链接库文件(DLL)。

注意,所有编译器选项都区分大小写。

若要编译但不链接,请使用/c。

使用NMAKE 生成输出文件。

使用BSCMAKE 支持类浏览。

以下是一个完整的编译器选项分类列表。

优化选项作用/O1 创建小代码/O2 创建快速代码/Oa 假设没有别名/Ob 控制内联展开/Od 禁用优化/Og 使用全局优化/Oi 生成内部函数/Op 改善浮点数一致性/Os 代码大小优先/Ot 代码速度优先/Ow 假定在函数调用中使用别名/Ox 使用最大优化(/Ob1gity /Gs)/Oy 省略框架指针代码生成选项作用/clr 启用C++ 的托管扩展并产生在公共语言运行库上运行的输出文件/EH 指定异常处理模型/G3 优化代码以优选386 处理器。

在Visual C++ 5.0 中已经停用,编译器将忽略此选项/G4 优化代码以优选486 处理器。

在Visual C++ 5.0 中已经停用,编译器将忽略此选项/G5 优化代码以优选Pentium/GB 与/G6 等效;将_M_IX86 的值设置为600/Gd 使用__cdecl 调用约定/Ge 激活堆栈探测/GF/GF 启用字符串池/GH 调用挂钩函数_penter/GH 调用挂钩函数_pexit/GL 启用全程序优化/Gm 启用最小重新生成/Gr 启用运行时类型信息(RTTI)/Gr 使用__fastcall 调用约定/GS 控制堆栈探测/GT 支持使用静态线程本地存储区分配的数据的纤程安全/GX 启用同步异常处理/Gy 启用函数级链接/GZ 使用__stdcall 调用约定/MD 使用MSVCRT.lib 创建多线程DLL/MDd 使用MSVCRTD.lib 创建调试多线程DLL/ML 使用LIBC.lib 创建单线程可执行文件/MLd 使用LIBCD.lib 创建调试单线程可执行文件/MT 使用LIBCMT.lib 创建多线程可执行文件/MTd 使用LIBCMTD.lib 创建调试多线程可执行文件输出文件选项作用/FA/FA 创建列表文件设置列表文件名/Fd 重命名程序数据库文件/Fe 重命名可执行文件/Fm 创建映射文件/Fo 创建对象文件/Fp 指定预编译头文件名/FR/FR 生成浏览器文件/Fx 将插入的代码与源文件合并调试选项作用/GS 缓冲区安全检查/GZ 与/RTC1 相同/RTC 启用运行时错误检查/Wp64 检测64 位可移植性问题/Yd 将完整的调试信息放在所有对象文件中/Yl 创建调试库时插入PCH 引用/Z7 生成与C 7.0 兼容的调试信息/Zd 生成行号/Zi 生成完整的调试信息预处理器选项作用/AI 指定在解析传递到#using 指令的文件引用时搜索的目录/c 在预处理期间保留注释/D 定义常数和宏/E 将预处理器输出复制到标准输出/EP 将预处理器输出复制到标准输出/Fl 预处理指定的包含文件/FU 强制使用文件名,就像它已被传递到#using 指令一样/I 在目录中搜索包含文件/P 将预处理器输出写入文件/U 移除预定义宏/U 移除所有的预定义宏/X 忽略标准包含目录/ZI 将调试信息包含在与“编辑并继续”兼容的程序数据库中语言选项作用/noBool 取消C++ bool、true 和false 关键字/vd 取消或启用隐藏的vtordisp 类成员/vmb 对指向成员的指针使用最佳的基/vmg 对指向成员的指针使用完全一般性/vmm 声明多重继承/vms 声明单一继承/vmv 声明虚拟继承/Za 禁用语言扩展/Zc 在/Ze 下指定标准行为/Ze 启用语言扩展/Zg 生成函数原型/Zl 从 .obj 文件中移除默认库名/Zp n 封装结构成员/Zs 只检查语法链接选项作用/F 设置堆栈大小/LD 创建动态链接库/LDd 创建调试动态链接库/link 将指定的选项传递给LINK/MD 使用MSVCRT.lib 编译以创建多线程DLL/MDd 使用MSVCRTD.lib 编译以创建调试多线程DLL/ML 使用LIBC.lib 编译以创建单线程可执行文件/MLd 使用LIBCD.lib 编译以创建调试单线程可执行文件/MT 使用LIBCMT.lib 编译以创建多线程可执行文件/MTd 使用LIBCMTD.lib 编译以创建调试多线程可执行文件预编译头选项作用/Y- 忽略当前生成中的所有其他预编译头编译器选项/Yc 创建预编译头文件/Yd 将完整的调试信息放在所有对象文件中/Yu 在生成期间使用预编译头文件/YX 自动处理预编译头杂项选项作用@ 指定响应文件/? 列出编译器选项/c 编译但不链接/H 限制外部(公共)名称的长度/HELP 列出编译器选项/J 更改默认的char 类型/NOLOGO 取消显示登录版权标志/QI0f 确保Pentium 0F 指令没有问题/QIfdiv FDIV、FPREM、FPTAN 和FPATAN 指令有缺陷的Intel Pentium 微处理器的变通方法QIfist 当需要从浮点类型转换为整型时取消Helper 函数_ftol 的调用/showIncludes 在编译期间显示所有包含文件的列表/Tc/Tc 指定C 源文件/Tp/Tp 指定C++ 源文件/V 设置版本字符串/w 设置警告等级/w 禁用所有警告/Wall 启用所有警告,包括默认情况下禁用的警告/WL 在从命令行编译C++ 源代码时启用错误信息和警告消息的单行诊断/Zm 设置编译器的内存分配限制CL 命令行使用下列语法:CL [option...] file... [option | file]... [lib...] [@command-file] [/link link-opt...]下表说明CL 命令的输入项意义option 一个或多个CL 选项。

VC动态创建工具栏及工具栏上的按钮及为按钮添加消息响应函数

VC动态创建工具栏及工具栏上的按钮及为按钮添加消息响应函数

VC动态创建工具栏及工具栏上的按钮及为按钮添加消息响应函数// OnInitDialog函数中//向列表中添加图标m_imagelist.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON12));m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON13));m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON9));m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON10));//m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON5));// m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON6));UINT arry[10];for(int i=0;i<5;i++){if(i==2) //第四个按钮为分割条;arry[i]=ID_SEPARATOR;elsearry[i]=i+1001;}m_toolbar.Create(this);m_toolbar.SetButtons(arry,5);m_toolbar.SetButtonText(0,"增加"); //图片下面添加文字;m_toolbar.SetButtonText(1,"修改");m_toolbar.SetButtonText(3,"删除");m_toolbar.SetButtonText(4,"关闭");//m_toolbar.SetButtonText(5,"学生管理");// m_toolbar.SetButtonText(6,"远程连接");m_toolbar.GetT oolBarCtrl().SetButtonWidth(20,30);m_toolbar.GetT oolBarCtrl().SetImageList(&m_imagelist);m_toolbar.SetSizes(CSize(50,50),CSize(32,32));//设置大小;RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CO NTROLBAR_LAST,0);//窗口类h头文件中//工具栏上的按钮的ID是连续的,如果不连续,一个按钮一个响应,或者修改为连续的,视情况而定afx_msg void OnBnClickedToolBar(UINT nID);//消息映射部分ON_COMMAND_RANGE(ID_BUTTON_1, ID_BUTTON_N, OnBnClickedToolBar)//工具栏上按钮的消息响应void CXXXDlg::OnBnClickedToolBar(UINT nID){int nIndex = nID - ID_BUTTON_1;CString strText(_T(""));strText.Format(_T("You select index: %d"), nIndex + 1);AfxMessageBox(strText);}。

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

VC++手动添加命令消息处理函数实例
操作
原文地址:/thirdballoon/item/dd320f320f7df45880f1a77a
开始了!
1.打开VC++ 6.0(废话)
2.建立一个exe程序,命名“AAA”(又废话)
点击“确定”弹出如下对话框
选择“基本对话框”,直接点击“完成”即可。

(又弹出对话框,点击“完成”)删除对话框上的默认控件,再天际一个按钮
3.添加消息处理函数
按ctrl+W,弹出类向导,按下图选择,点击“Add Function”
弹出对话框,保持成员函数名OnButton1,点击“OK”
点击“类向导”上的“确定”,退出。

4.添加新消息
点击“查看”——“资源符号”,弹出
点击“新建”,弹出,命名新消息如下:
点击“确定”,“关闭”
5.声明消息处理函数
在ClassView选项卡上双击如图高亮位置
在如下位置添加高亮代码(上边的OnButton1是我们刚才添加的,就按它的格式在下边写个差不多风格的就行,写啥都行,但是你得记住,6中得用)
6.添加映射
双击如下高亮区
在如下位置添加如下代码(还是按照上一行的风格写,添加的位置是按照BUTTON1找到的)
7.添加该新消息的实现函数(就是5中声明的具体内容)
在6中代码的最下端添加如下高亮代码
MessageBox函数功能你试了就知道了
8.设置触发事件
这个要解决的问题是NEWMESSAGE这个消息是哪里来的问题
在7中你添加的代码上有一串代码,如下,添加SendMessage
9.看效果
运行(点击小叹号)
效果如下
点击按钮(只有那一个!!右上角那个不算),效果如下
成功了!。

相关文档
最新文档