如何在MFC中添加全局变量和全局函数=

合集下载

MFC实现动态菜单及响应函数

MFC实现动态菜单及响应函数

MFC实现动态菜单及响应函数一、实现步骤1.调用AppendMenu函数在菜单栏添加菜单2.调用AppendMenu函数在菜单栏菜单项添加子菜单3.调用AppendMenu函数在菜单栏菜单项添加动态子菜单4.将菜单所属的窗口句柄传入OnInitMenu函数5.在OnInitMenu函数中清除原有的菜单6.在菜单窗口中添加新的菜单二、代码1.主程序代码```// MFC_DynamicMenu.cpp : 定义应用程序的入口点。

//#include "stdafx.h"#include "MFC_DynamicMenu.h"#define MAX_LOADSTRING 100//全局变量:HINSTANCE hInst; // 当前实例WCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本WCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名//此代码模块中包含的函数的前向声明:ATOM MyRegisterClass(HINSTANCE hInstance);BOOL InitInstance(HINSTANCE, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int APIENTRY wWinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPWSTR lpCmdLine,_In_ int nCmdShow)UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);//TODO:在此处放置代码。

//初始化全局字符串LoadStringW(hInstance, IDS_APP_TITLE, szTitle,MAX_LOADSTRING);LoadStringW(hInstance, IDC_MFCCDYNAMICMENU, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);//执行应用程序初始化:if (!InitInstance (hInstance, nCmdShow))return FALSE;}HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MFCCDYNAMICMENU));MSG msg;//主消息循环:while (GetMessage(&msg, nullptr, 0, 0))if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) TranslateMessage(&msg);DispatchMessage(&msg);}}return (int) msg.wParam;//// 函数: MyRegisterClass////目标:注册窗口类。

VC++MFC基础教程

VC++MFC基础教程
DCB dcb; GetCommState(hCom,&dcb); dcb.BaudRate=9600; //波特率为 dcb.ByteSize=8; //每个字节有位
dcb.Parity=NOPARITY; //无奇偶校验位 dcb.StopBits=TWOSTOPBITS; //两个停止位 SetCommState(hCom,&dcb);
m_cComm.put_OutBufferSize(512); //设置输出缓冲区 m_cComm.put_Settings(TEXT("9600,n,8,1"));//波特率,无校验,个数
据位,个停止位
if(!m_cComm.get_PortOpen())
{
m_cComm.put_PortOpen(TRUE); //打开串口
B)修改控件属性
修改上面的示例编辑框属性: ID——IDC_EDIT_RECV;
Multiline——True; Want Return——True; Vertical Scroll——True; Auto VScroll——True;
修改下面的示例编辑框属性: ID——IDC_EDIT_SEND; Multiline——True; Vertical Scroll——True;
1.3、API 串口编程
按照步骤一新建 Serial 工程,这里不赘述了。
A)添加 API 串口初始化代码
1、在 SerialDlg.cpp 文件中添加全局变量:
HANDLE hCom; //全局变量,串口句柄 // CSerialDlg 对话框
2、在 SerialDlg.cpp 文件中的 OnInitDialog()函数添加如下代码:
AfxMessageBox("写串口失败!"); }

如何在MAC中添加全局变量和全局函数

如何在MAC中添加全局变量和全局函数

如何在MFC中添加全局变量和全局函数如何在MFC中添加全局变量和全局函数全局变量和全局函数最好集中封装,不要在文档、视图等类内部定义,这样用起来才有全局的感觉。

例:1、添加一个没有基类的新类,设类名起为CPublic,姑且称之为公用类,单击“Insert”菜单下的“New Class”命令,选择“Class type”为“Generic Class”,在“Name”栏中填入类名“CPublic”,单击“OK”,则新类建立完毕。

2、包含公用类的头文件,使各个类都能访问它CPublic的头文件应包含在应用程序类的头文件中,这样在其它类中引用CPublic类时就不需要再包含了。

Test.h:(应用程序类头文件)(如我创建了AOI的工程则放到AOI.h)#include "Public.h" //包含公用类头文件class CTestApp : public CWinApp{????};3、在公用类中定义全局变量和全局函数,均使用tatic修饰,静态变量还必须在类外定义和初始化Public.h:(公用类头文件)class CPublic{public:CPublic();virtual ~CPublic();public:static int x; //全局变量static int time; //全局变量static int f(int y); //全局函数????}在公用类中对静态变量进行初始化和定义函数体:Public.cpp:(公用类程序文件)int CPublic::x = 0; //初始化全局变量。

C语言全局变量定义方法

C语言全局变量定义方法

C语言全局变量定义方法在C语言中,全局变量是在函数外部定义的变量,它可以被整个程序的各个函数访问和使用。

全局变量的作用范围是整个程序,在程序中任何地方都可以使用。

全局变量的定义方式有以下几种:1.在函数外部定义全局变量:```int globalVar; // 声明一个全局变量```这种方法将全局变量的定义放在所有函数的外部,可以在程序中的任何位置对其进行访问和使用。

全局变量在没有被初始化时,默认值为0。

2.在函数外部定义全局变量并初始化:```int globalVar = 100; // 声明并初始化一个全局变量```这种方法在定义全局变量的同时可以进行赋值初始化,全局变量的初始值可以根据需要自行设定。

3.在头文件中定义全局变量:除了在函数外部定义全局变量之外,还可以创建一个头文件,然后在需要使用全局变量的源文件中包含这个头文件,即可实现全局变量的共享。

在头文件中定义全局变量的步骤如下:a. 在一个头文件(例如global.h)中声明全局变量:```extern int globalVar; // 声明一个全局变量```注意使用`extern`关键字来修饰全局变量,表示该变量的定义在其他源文件中。

b.在需要使用全局变量的源文件中包含头文件:```#include "global.h"```通过包含头文件,就可以在源文件中访问和使用全局变量。

4. 使用static关键字定义全局变量:通过使用`static`关键字可以定义静态全局变量,静态全局变量的作用范围也是整个程序,但其作用范围被限制在定义它的源文件中。

静态全局变量的定义和普通全局变量的定义类似,只需要在声明时加上static 关键字即可:```static int globalVar; // 声明一个静态全局变量```静态全局变量只能在定义它的源文件中使用,其他源文件无法访问和使用。

需要注意的是,全局变量的使用应尽量减少,并且在使用时要小心。

MFC中使用快捷键的一种简单实用详细的方法

MFC中使用快捷键的一种简单实用详细的方法
6.编译运行此工程,出现对话框后,按 Ctrl+A 键,就会弹出如下图所示的对话框:
7.在快捷键表中还可以设置多个快捷键组合,然后分别添加这些快捷键的消息 COMMAND 的响应函数,即可实现不同的快捷键完成不同的功能.
生成如下的响应函数,在该函数中添加自己想要的代码:
void CMy1Dlg::OnAccelerator1001() {
// TODO: Add your command handler code here MessageBox("快捷键的使用");//这里仅以弹出一个消息框为例 添加自己想要的代码即可 }
HACCEL hAccTable;
3.在 OnInitDialog()中添加如下代码:
hAccTable=LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1)); //载入快捷键资源,其中 IDR_ACCELERATOR1 为快捷键表的 ID.
if(::TranslateAccelerator(m_hWnd,hAccTable,pMsg)) {
return(true); } } return CDialog::PreTranslate设置的快捷键资源添加消息 COMMAND 的响应函数,如下图所示:
1.新建一个基本对话框的工程,在其资源视图窗中插入一个 Accelerator 资源,如下图所示:
该资源的默认 ID 是 IDR_ACCELERATOR1,然后设置快捷键,如下图所示:
这里设置的是 Ctrl+A 快捷键,可以根据自己的习惯设置其他的按键组合.设置完成后会出现 下图:
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宏,该宏会自动在消息映射表中添加对应的消息处理函数。

MFC中的自动显示提示信息CToolTipCtrl类

MFC中的自动显示提示信息CToolTipCtrl类

MFC中的⾃动显⽰提⽰信息CToolTipCtrl类摘⾃⽹络:MFC 中 Tooltip 实现的⼏种⽅式⽅法⼀:利⽤CWnd本⾝⾃⾝⽀持的tooptip来实现,这种⽅法适⽤给控件增加tooltip,⾮常⽅便和简单⽅法如下:1、在窗⼝中增加消息映射ON_NOTIFY_EX(TTN_NEEDTEXT, 0, SetTipText)SetTipText是个回调函数,名字叫什么⽆所谓,符合原型就⾏了,原型下⾯会说。

2、EnableToolTips(TRUE),使⽤这个⽅法调⽤这个函数是必不可少的.建议在CDialog::OnInitDialog调⽤。

3、在窗⼝中增加⼀个函数⽤于动态提供显⽰内容,其原型为 BOOL SetTipText(UINT id, NMHDR *pTTTStruct, LRESULT *pResult),下⾯的代码可以根据传⼊的参数判定应该显⽰的内容。

BOOL CWndYour::SetTipText(UINT id, NMHDR *pTTTStruct, LRESULT *pResult){TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct;UINT nID = pTTTStruct->idFrom; //得到相应窗⼝ID,有可能是HWND//表明nID是否为HWNDif (pTTT->uFlags & TTF_IDISHWND){//从HWND得到ID值,当然你也可以通过HWND值来判断nID = ::GetDlgCtrlID((HWND)nID);if (NULL == nID)return FALSE;switch(nID){case(IDC_YOUR_CONTROL1)strcpy(pTTT->lpszText, your_string1);break;case(IDC_YOUR_CONTROL2)//设置相应的显⽰字串break;default:break;}return TRUE;}return FALSE;}4、很重要的⼀点,要显⽰的控件必须设置notify属性,否则收不到notify消息,⾃然也就显⽰不了tooltip。

VC6MFC菜单详解

VC6MFC菜单详解

VC6MFC菜单详解⼀、消息路由1、消息的路由:MFC在后台把窗⼝过程函数替换成了AfxWndProc函数,由这个函数对所有的消息进⾏处理,该函数内部将调⽤AfxCallWndProc函数,AfxCallWndProc函数⼜将调⽤WindowProc函数(CWnd类的成员函数),应⽤程序所有类型的消息都会进⼊到这个函数中。

WindowProc函数⼜将调⽤OnWndMsg函数,该函数会对到来的消息进⾏⼀个类型判断:若是标准消息,OnWndMsg函数查找相应的消息映射函数进⾏处理;若是命令消息,就交由OnCommand函数来处理,该函数将完成命令消息的路由;若是通告消息,将交由OnNotify 函数来处理,该函数将完成通告消息的路由。

OnCommand函数和OnNotify函数最后都会调⽤OnCmdMsg函数。

如下图所⽰:2、菜单命令消息路由的具体过程:当单击某个菜单项时,最先接收到这个菜单命令消息的是框架类(Frame类)。

框架类将把接收到的这个消息交给它的⼦窗⼝,即视类(View类)。

视类⾸先根据命令消息映射机制查找⾃⾝是否对此消息进⾏了响应,若响应了,就调⽤相应响应函数对这个消息进⾏处理,消息路由结束;若视类没有对此命令消息做出响应,就交由⽂档类。

⽂档类同样查找⾃⾝是否对这个菜单命令进⾏了响应,若响应了,就由⽂档类的命令消息响应函数进⾏处理,路由过程结束。

若⽂档类也未做出响应,就把这个命令消息交还给视类,视类⼜把该消息交还给框架类。

框架类查看⾃⼰是否对这个命令消息进⾏了响应,若它也没有做出响应。

就把这个菜单命令消息交给应⽤程序类来处理。

因此菜单命令的响应顺序依次是:视类、⽂档类、框架类、应⽤程序类。

⼆、菜单1、菜单项前添加标记”√”(1)、通过菜单项位置索引,在Frame类的OnCreate函数中添加:GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION | MF_CHECKED);说明:GetMenu()获得菜单栏,GetSubMenu(0)获得第⼀个⼦菜单,CheckMenuItem(0,MF_BYPOSITION | MF_CHECKED)为⼦菜单的第⼀个菜单项添加标记。

mfc toolbar用法

mfc toolbar用法

mfc toolbar用法MFC(Microsoft Foundation Classes)是一个微软公司提供的应用程序框架,用于在Windows 操作系统上开发应用程序。

在 MFC 中,Toolbar 工具栏是一个常用的控件,它可以包含多个按钮,并且可以自定义每个按钮的图像、文本和功能。

以下是一个简单的 MFC Toolbar 用法示例:1. 在 VS2019 中新建一个 MFC 项目。

2. 右键资源文件,选择 ToolBar,点击新建。

3. 自定义三个按钮,可以设置图案、颜色、样式。

4. 因为资源不能像控件一样通过自动生成工具自动添加变量,所以需要手动添加成员变量,在主对话框的 h 文件中添加 CToolBar 类型的变量,并引入 afxext.h 头文件。

5. 在主窗口 cpp 中重写父类继承下来的虚函数 OnInitDialog(),并添加以下代码。

以下是详细步骤:1. 在 VS2019 中新建一个 MFC 项目。

2. 右键资源文件,选择 ToolBar,点击新建。

3. 自定义三个按钮,可以设置图案、颜色、样式。

4. 因为资源不能像控件一样通过自动生成工具自动添加变量,所以需要手动添加成员变量,在主对话框的 h 文件中添加 CToolBar 类型的变量,并引入 afxext.h 头文件。

5. 在主窗口 cpp 中重写父类继承下来的虚函数 OnInitDialog(),并添加以下代码。

上述代码将在 MFC 应用程序中创建一个包含三个按钮的 Toolbar 工具栏,并在主窗口中显示。

每个按钮的图像和功能可以根据需要进行自定义。

请注意,上述示例仅涵盖了Toolbar 工具栏的基本用法,你可以根据实际需求进一步扩展和定制其功能。

C语言在头文件中定义全局变量

C语言在头文件中定义全局变量

头文件定义全局变量等问题全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?可以,在不同的C文件中以static形式来声明同名全局变量。

头文件中不可以直接定义变量和函数,但是可以定义static变量,类。

extern 用法,全局变量与头文件(重复定义)用#include可以包含其他头文件中变量、函数的声明,为什么还要extern关键字,如果我想引用一个全局变量或函数a,我只要直接在源文件中包含#include<xxx.h> (xxx.h包含了a的声明)不就可以了么,为什么还要用extern 呢??这个问题一直也是似是而非的困扰着我许多年了,今天上网狠狠查了一下总算小有所获了:头文件首先说下头文件,其实头文件对计算机而言没什么作用,她只是在预编译时在#include的地方展开一下,没别的意义了,其实头文件主要是给别人看的。

我做过一个实验,将头文件的后缀改成xxx.txt,然后在引用该头文件的地方用#include"xxx.txt"编译,链接都很顺利的过去了,由此可知,头文件仅仅为阅读代码作用,没其他的作用了!不管是C还是C++,你把你的函数,变量或者结构体,类啥的放在你的.c或者.cpp 文件里。

然后编译成lib,dll,obj,.o等等,然后别人用的时候最基本的gcc hisfile.cpp yourfile.o|obj|dll|lib 等等。

但对于我们程序员而言,他们怎么知道你的lib,dll...里面到底有什么东西?要看你的头文件。

你的头文件就是对用户的说明。

函数,参数,各种各样的接口的说明。

那既然是说明,那么头文件里面放的自然就是关于函数,变量,类的“声明”了。

记着,是“声明”,不是“定义”。

那么,我假设大家知道声明和定义的区别。

所以,最好不要傻嘻嘻的在头文件里定义什么东西。

比如全局变量: #ifndef _XX_头文件.H#define _XX_头文件.H int A; #endif 那么,很糟糕的是,这里的int A是个全局变量的定义,所以如果这个头文件被多次引用的话,你的A会被重复定义显然语法上错了。

mfc自定义消息用法

mfc自定义消息用法

mfc自定义消息用法在MFC(Microsoft Foundation Class)中,自定义消息可以通过两种方式定义和使用:通过注册消息和通过自定义消息常量。

一、通过注册消息的方式:1. 调用`RegisterWindowMessage`函数定义一个系统唯一的消息,例如:`static UINT WM_MY_MESSAGE = RegisterWindowMessage("User");`2. 使用`ON_REGISTERED_MESSAGE`宏指令代替`ON_MESSAGE`宏指令,其余步骤同上。

二、通过自定义消息常量方式:1. 在公共头文件中添加自定义消息常量,例如:`const UINTWM_TESTMESSAGE = WM_USER + 0x100;`2. 在类的头文件中,添加对应的消息处理函数声明,例如:`afx_msg LRESULT OnTestMessage(WPARAM wParam, LPARAM lParam);`3. 在类的实现文件中,添加消息映射,以告知程序当接收到自定义消息时,应该交由哪个函数处理。

例如:```c++BEGIN_MESSAGE_MAP(CReceiveDlg, CDialogEx)ON_MESSAGE(WM_TESTMESSAGE, OnTestMessage)END_MESSAGE_MAP()```4. 编写消息对应的函数具体实现。

例如:```c++LRESULT CReceiveDlg::OnTestMessage(WPARAM wParam, LPARAM lParam){// 消息处理的具体实现代码...return 0;}```5. 使用`PostMessage`或`SendMessage`发送自定义消息。

例如:`::PostMessage(m_pRecvDlg->GetSafeHwnd(), WM_TESTMESSAGE, (WPARAM)pInfo, 0);`。

MFC控件使用详细教程

MFC控件使用详细教程

使用Windows标准控件我们在前面曾提到过,控件是一些行为标准化了的窗口,一般用于对话框或其它窗口中充当与用户交互的元素。

在Visual C++中,可以使用的控件分成三类:(1) Windows标准控件Windows标准控件由Windows操作系统提供,在Windows 95中还提供了一些新增的控件。

所有这些控件对象都是可编程的,我们可以使用Visual C++提供的对话框编辑器把它们添加到对话框中。

Microsoft基础类库(MFC)提供了封装这些控件的类,它们列于表6.1。

表6.1 Windows标准控件续表6.1前面提到过,在MFC中,类CWnd是所有窗口类的基类,很自然的,它也是所有控件类的基类。

Windows标准控件在以下环境下提供:•Windows 95•Windows NT 3.51及以后版本•Win32s 1.3•注意:•Visual C++ 4.2及以后版本不再支持Win32s。

(2) ActiveX控件ActiveX控件可用于对话框中,也可用于HTML文档中。

这种控件过去被称为OLE 控件。

本书将在专门的章节中来讲述关于ActiveX控件的知识。

这里仅指出ActiveX控件使用了与标准控件完全不同的接口和实现方法。

(3) 其它MFC控件类除了Windows标准控件和自己编写的或者来自于第三方软件开发商的ActiveX 控件以外,MFC还提供了另外三种控件,它们由下面的三个类进行封装:•类CBitmapButton用于创建以位图作为标签的按钮,位图按钮最多可以包括四个位图图片,分别代表按钮的四种不同状态。

•类CCheckListBox用于创建选择列表框,这种列表框中的每一项前面有一个复选框,以决定该项是否被选中。

•类CDragListBox用于创建一种特殊的列表框,这种列表框允许用户移动列表项。

在本章我们仅讲述第一类控件,即Windows标准控件。

所涉及的内容包括各个控件的使用及相应的技巧。

mfc 添加函数

mfc 添加函数

mfc 添加函数
在MFC(Microsoft Foundation Class)中添加函数相对直接,以下是一
个基本步骤:
1. 打开或创建你的MFC类:首先,你需要打开或创建一个MFC类。

这通
常是在一个`.cpp`和`.h`文件中完成的。

2. 在类定义中添加函数:在类的`.h`文件中,你可以添加一个新的函数声明。

例如,如果你想添加一个名为`MyFunction`的函数,你可以这样做:
```cpp
void MyFunction();
```
3. 实现函数:在相应的`.cpp`文件中,你需要实现这个函数。

例如:
```cpp
void CMyClass::MyFunction()
{
// 实现代码
}
```
4. 使用函数:一旦你添加了函数,你就可以在你的类中使用它了。

例如,如果你想在类的某个其他函数中调用`MyFunction`,你可以这样做:
```cpp
void CMyClass::AnotherFunction()
{
// 一些代码...
MyFunction(); // 调用新添加的函数
// 更多代码...
}
```
5. 编译和测试:最后,编译你的项目并运行它以确保新添加的函数工作正常。

注意:在MFC中,函数命名通常遵循特定的约定,例如使用`CMyClass`作为类名,并使用`MyFunction`作为函数名。

当然,这并不是强制的,但遵
循这些约定可以使代码更易于理解和维护。

mfc 控件变量

mfc 控件变量

mfc 控件变量MFC 控件变量,是指在界面中通过控件ID或者控件名称定义的变量,方便程序员通过代码来操作相关控件,从而实现程序功能。

下面是对 MFC 控件变量的详细解释和使用方法:1.定义控件变量定义控件变量有两种方法:(1)响应菜单项或按钮事件,使用类向导生成的消息映射函数,在函数内部使用对话框类中的控件变量进行操作。

(2)在对话框类的头文件中添加控件变量的定义,即将控件变量声明为一个类的成员变量。

2.控件变量的数据类型MFC 支持的控件变量数据类型可以分为四类:(1)BOOL 类型,通常用于 Check Box/ Radio Button 类型的控件。

当控件被选中时,BOOL 类型的控件变量值为 true;当为未选中时,BOOL 类型的控件变量值为 false。

(2)CString 类型,通常用于 edit 控件和 static 控件。

CString 是在 MFC 库中预定义的字符串类,其操作方式类似 C++ 中的 string 类。

(3)int 类型,通常用于 edit 控件和 combo box 控件。

对于edit 控件,int 类型的控件变量可以用于获取和设置控件中的整数值。

对于 combo box 控件,则可以用于获取和设置控件列表中选定项的索引。

(4)CWnd *类型,通常用于 List Box/ Combo Box/ Edit 等控件。

CWnd 是 MFC 中的基类,设计用于操作窗口对象。

CWnd *类型的控件变量可以用于获取指向控件窗口对象的指针,以便对其执行更多操作。

3.使用控件变量在对话框类中定义控件变量后,我们可以在类成员函数内使用该变量,对控件进行各种操作。

例如:(1)获取控件文本我们可以使用 CString 类型的控件变量和控件对象的 GetWindowText 函数来获取 edit控件中的文本值:CString str;GetDlgItemText(IDC_EDIT1, str);m_strEdit1 = str;(2)设置控件文本我们可以直接使用 CString 类型的控件变量设置 edit 盒 static 控件中的文本值:SetDlgItemText(IDC_STATIC1, m_strStatic1);(3)获取 Check Box/ Radio Button 的状态我们可以使用 BOOL 类型的控件变量获取 Check Box/ Radio Button的状态:BOOL bCheck = GetDlgItemInt(IDC_CHECK1);if (bCheck) {// Check Box 被选中}(4)设置 Combo Box 选中项我们可以使用 int 类型的控件变量来设置 combo box 的选中项:m_ComboBox.SetCurSel(m_nComboBoxIndex);4.总结MFC 控件变量是在对话框类中定义的,用于操作对话框的控件。

vc6.0开发多线程程序基础教程

vc6.0开发多线程程序基础教程

1、HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
该函数用于结束线程的挂起状态,执行线程。 4、VOID ExitThread(DWORD dwExitCode);
该函数用于线程终结自身的执行,主要在线程的执行函数中被调用。其中参数dwExitCode用来设置线程的退出码。 5、BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode);
在MultiThread2Dlg.h文件中添加线程函数声明: void ThreadFunc(int integer);
注意,线程函数的声明应在类CMultiThread2Dlg的外部。
在类CMultiThread2Dlg内部添加protected型变量: HANDLE hThread;
::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_TIME,strTime);
Sleep(1000);
}
}
该线程函数没有参数,也不返回函数值。只要m_bRun为TRUE,线程一直运行。
双击IDC_STARTቤተ መጻሕፍቲ ባይዱ钮,完成该按钮的消息函数: void CMultiThread1Dlg::OnStart()
{
Beep(200,50);
Sleep(1000);
}
}
双击IDC_START按钮,完成该按钮的消息函数: void CMultiThread2Dlg::OnStart()

MFC程序中的WinMain函数

MFC程序中的WinMain函数
图 3.17 显示当前变量取值的小窗口
方法二是利用 VC++提供的调试窗口来查看变量的当前值。操作步骤是单击 V iew 菜单,选择 Debug Windows 选项,在下拉菜单中选择 Variables 菜单项,即 可显示变量窗口,如图 3.18 所示。该窗口显示了程序当前上下文中的一些重要 变量的当前值。
WinMain 函数找到了。现在我们可以看看 Test 程序是否会进入这个 WinMain 函数。在 WinMain 函数中按下 F9 键设置一个断点,然后按下 F5 键调试运行当
前程序。我们发现程序确实运行到该断点处停了下来,如图 3.13 所示。这说明 Test 这个 MFC 程序确实有 WinMain 函数,在程序编译链接时,WinMain 函数就成 为该程序的一部分。
在我们通常的理解当中,WinMain 函数是程序的入口函数。也就是说,程序 运行时首先应该调用的是 WinMain 函数,那么这里为什么程序会首先调用 CTest App 类的构造函数呢?看一下 CTestApp 的源文件,可以发现程序中定义了一个 C TestApp 类型的全局对象:theApp。代码如下。
/////////////////////////////////////////////////////////////////////// // The one and only CTestApp object CTestApp theApp;
提示:MFC 程序的全局变量都放置在 ClassView 标签页的 Globals 分支下,展开该分支 即可看到程序当前所有的全局变量。双击某个全局变量,即可定位到该变量的定义处。
MFC 程序中的 WinMain 函数
读者还记得我们在第 2 章中讲述的创建 Win32 应用程序的几个步骤吗?当 时,我们介绍 Win32 应用程序有一条很明确的主线:首先进入 WinMain 函数,然 后设计窗口类、注册窗口类、产生窗口、注册窗口、显示窗口、更新窗口,最后 进入消息循环,将消息路由到窗口过程函数中去处理。遵循这条主线,我们在写 程序时就有了一条很清晰的脉络。

MFC中定义全局变量

MFC中定义全局变量

MFC中定义全局变量
全局变量⼀般这样定义:
1.在⼀类的.cpp中定义 int myInt;
然后再在要⽤到的地⽅的.cpp⾥extern int myInt;这样就可以⽤了。

2.在stdafx.cpp中加⼊:
int myInt;
然后在stdafx.h中加⼊:
extern int myInt
这样定义的变量以后⽆论在什么⽂件中都可见的.
如果是类对象:
在stdafx.h中这样声明:
extern CMyClass g_class;
在stdafx.cpp中定义:
CMyClass g_class;
但有⼀点:stdafx.h中 extern CMyClass g_class;这句前必须有CMyClass的定义,或者#include CMyClass的定义。

3.⽐较规范的是,先定义⼀个Glbs.h,把所有的全局变量原始定义放进去。

然后定义⼀个Externs.h,把你先前定义在Glbs.h中的变量都加上extern。

注意:如果你在Glbs.h中设置了初值,那么在Externs.h中就不要加值了。

然后调⽤时,第⼀次调⽤的#i nclude <Glbs.h>,以后调⽤的#i nclude <Externs.h>
4.在CApp中定义变量:
CString g_sUser;//定义全局
在要引⽤的类中如此:
extern CSvApp theApp;//加⼊这句.在.CPP⽂件的构造函数前.
在引⽤时:if( theApp.m_sUserName == "") ;//这样引⽤.。

c语言中实现全局变量

c语言中实现全局变量

c语⾔中实现全局变量在⽤C语⾔编写程序的时候,我们常常想定义⼀个可以在不同.c⽂件中被使⽤的变量,以此来实现数据的传递。

但是这个变量定义的不对的话,就会在编译时出现编译错误,或者可以编译通过,但是没有实现变量在不同.c⽂件中实现共⽤。

正确的全局变量定义⽅式是这样的。

我们举例说明,项⽬⽂件夹project下有main.c、common.c和common.h三个⽂件,其中common.h⽂件分别#include在main.c和common.c ⽂件中。

现在希望声明⼀个字符型变量key,在main.c和common.c中公⽤。

使⽤extern关键字来声明变量为外部变量。

具体说就是在其中⼀个c⽂件中定义⼀个全局变量key,然后在另⼀个要使⽤key这个变量的c⽂件中使⽤extern关键字声明⼀次,说明这个变量为外部变量,是在其他的c⽂件中定义的全局变量。

请注意我这⾥的⽤词:定义和声明。

例如在main.c⽂件中定义变量key,在common.c⽂件中声明key变量为外部变量,这样这两个⽂件中就能共享这个变量key了。

(1)main.c⽂件 #include "common.h" unsigned char key; (2)common.c⽂件: #include "common.h" extern unsigned char key;其实就是变量定义和变量声明的区别,变量定义使⽤“数据类型+变量名称”的形式,编译器需要给他分配内存单元的;⽽变量声明使⽤“extern 变量类型+变量名称”的形式,是告诉编译器我这个变量将在其他外部c⽂件中定义,我这⾥只是在外部⽤它。

编译器就不给他分配内存空间,⽽等到真正遇到变量定义的时候再给他分配内存空间。

1、普通变量定义成全局变量如果是普通类型,完全可以不⽤*.h⽂件,直接在*.c⽂件中定义,在调⽤⽂件处⽤extern 声明,因为对于普通类型,编译器是可以识别的。

在MFC下如何定义全局变量和全局函数

在MFC下如何定义全局变量和全局函数

在MFC下如何定义全局变量和全局函数在MFC(Microsoft Foundation Class)下,可以通过以下几种方式来定义全局变量和全局函数。

1.静态成员变量和静态成员函数:在MFC类中,可以使用静态成员变量和静态成员函数来实现全局变量和全局函数的效果。

静态成员变量和静态成员函数是与类相关联的,不是与具体对象相关联的,在程序的任何位置都可以访问。

定义静态成员变量和静态成员函数的步骤如下:-在MFC类的头文件(.h文件)中声明静态成员变量和静态成员函数,并添加一个静态关键字。

```cppclass CMyClasspublic:static int s_globalVar;static int StaticGlobalFunction(;};```- 在MFC类的源文件(.cpp文件)中定义静态成员变量和静态成员函数,并将其前面加上类名和作用域解析操作符。

```cppint CMyClass::s_globalVar = 10;int CMyClass::StaticGlobalFunctionreturn s_globalVar;}```-可以在程序的任何位置通过类名和作用域解析操作符来访问静态成员变量和静态成员函数。

```cppint result = CMyClass::s_globalVar;int result = CMyClass::StaticGlobalFunction(;```2.全局变量和全局函数:在MFC中,可以通过在源文件(.cpp文件)的顶部定义全局变量和全局函数的方式来实现全局变量和全局函数的效果。

全局变量和全局函数的定义是在MFC类之外的,可以在程序的任何位置进行访问和使用。

全局变量和全局函数的定义如下:- 在源文件的顶部定义全局变量,并使用extern关键字。

```cpp//在源文件的顶部定义全局变量extern int g_globalVar = 10;```-在源文件的顶部定义全局函数。

vs2010mfc控件添加不了变量的问题

vs2010mfc控件添加不了变量的问题

S2010MFC不能为控件添加变量的问题
这两天在做一个小程序。

要用到mfc。

于是用vs2010在做。

以前没用过。

所以边学边做。

今天遇到一个问题是。

为一个Editcontrl添加变量却实现不了的问题。

如图1。

图1
右键,选择添加变量(B),然后一点反应都没有。

没办法又新建了一个。

工程—>VC++—>MFC应用程序。

结果可以了。

两方对比发现是对话框名字发生了变化导致的。

按照图2 到图的顺序找到对应的对话框ID ,查看是否发生了变化。

按照图片的方式找到打开“Resource View”视图,然后在资源中找到对话框。

图2
图3
右键图3中矩形里面的资源对话框。

选择“属性”。

在属性框里找到“ID”(默认属性框会出现在屏幕右侧)。

如图4
图4
点击“ID”右面如图中“IDHELP”的部分会生成下拉选项。

选择IDD_XXX_DIALOG如图5。

图5
这样在添加控件变量就能生成变量向导了。

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

如何在MFC中添加全局变量和全局函数
全局变量和全局函数最好集中封装,不要在文档、视图等类内部定义,这样用起来才有全局的感觉。

例:
1、添加一个没有基类的新类,设类名起为CPublic,姑且称之为公用类
单击“Insert”菜单下的“New Class”命令,选择“Class type”为“Generic Class”,在“Name”栏中填入类名“CPublic”,单击“O K”,则新类建立完毕。

2、包含公用类的头文件,使各个类都能访问它
CPublic的头文件应包含在应用程序类的头文件中,这样在其它类中引用CPublic类时就不需要再包含了。

Test.h:(应用程序类头文件)(如我创建了AOI的工程则放到AOI.h)
#include "Public.h" //包含公用类头文件
class CTestApp : public CWinApp
{
…………
};
3、在公用类中定义全局变量和全局函数,均使用static修饰,静态变量还必须在类外定义和初始化
Public.h:(公用类头文件)
class CPublic
{
public:
CPublic();
virtual ~CPublic();
public:
static int x; //全局变量
static int time; //全局变量
static int f(int y); //全局函数
…………
}
在公用类中对静态变量进行初始化和定义函数体:
Public.cpp:(公用类程序文件)
int CPublic::x = 0; //初始化全局变量
int CPublic::time; //定义全局变量
CPublic::CPublic()
{
}
CPublic::~CPublic()
{
}
int CPublic::f(int y) //全局函数,这里不要再加static
{
y++;
return y;
}
4、全局量的使用
使用变量:CPublic::变量名
使用函数:CPublic::函数()
如在视图的某函数中访问变量x和函数f():
void CTestView::xyz()
{
CPublic::x = 0; //访问变量x
CPublic::time = CPublic::f(1); //访问函数f()
…………
}
在其它类中访问x、time和f()的方法与此相同。

5、几点注意:
①由于静态量可独立于类存在,不需要生成CPublic类的实例。

②静态数据成员的定义和初始化必须在类外进行,如例中x的初始化;变量time虽然没有初始化,但也必须在类外进行定义。

由于没有生成CPublic类的实例,所以它的构造函数和析构函数都不会被执行,在里面做什么工作都没有什么意义。

③如果静态函数需要访问CPublic类内的变量,这些变量也必须为静态的。

因为非静态量在不生成实例时都不会存在。

相关文档
最新文档