全局函数如何访问对话框控件
来源:互联网 发布:mac程序员必备 编辑:程序博客网 时间:2024/05/19 02:44
很多时候我们在一个全局函数中会访问到应用程序控件,由于全局函数不属于具体的某个对话框类,所以它里面是无法直接访问某个对话框,当然也就访问不到对话框控件了。有以下几种情况和对应的处理方式。
(1)全局线程函数中利用线程参数访问对话框控件
创建一个对话框后,放置一个进度条,添加对应的控制变量myProgressCt,在CPP添加一个线程控制标志volatile BOOL m_bRun2。进度条是个状态显示量,跟后台数据处理是独立的,所以需用多线程。在对话框初始化添加进度条的默认值处理:
myProgressCt.SetRange(0,100); //范围
m_bRun2 = TRUE;
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc,this, 0,NULL); //注意线程带的参数this,指向当前对象
线程函数如下:
void ThreadFunc(LPVOID lParam)
{
CProgressThreadDlg* p = (CProgressThreadDlg*)lParam; //把this强制转成对话框类指针
int i = 0;
while(m_bRun2)
{
i ++;
p->myProgressCt.SetPos(i); //从而用对话框指针P的子控件显示进度条
Sleep(200);
}
}
(2)全局函数中利用某些带窗口句柄的函数访问对话框控件
在一个线程中不断更新对话框的编辑框上的时间显示
void ThreadFunc()
{
CTime time;
CString strTime;
m_bRun=TRUE;
while(m_bRun)
{
time=CTime::GetCurrentTime();
strTime=time.Format("%H:%M:%S");
::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_TIME,strTime);
Sleep(1000);
}
}
AfxGetMainWnd()的说明:用向导建立一个单文档/多文档程序,其中最外面的框架叫做 frame,包括标题、最大最小化按钮、菜单、工具条、以及view等都在frame中。frame中,中间那块白色的部分被view 占据。AfxGetMainWnd() 就是取得此frame 的指针,m_hWnd是此frame 的窗口句柄。
上面说的那个frame ,在你工程中默认的名字叫做CMainFrame,取得此frame 指针,可以对frame(也就是最外面的窗口) 进行操作,比如隐藏、移动、最小化、最大化窗口。其实CMainFrame从 CFrameWnd 派生,CFrameWnd又从CWnd派生。CMainFrame 本质上就是一个窗口。例如:
AfxGetMainWnd()-> CenterWindow() ; // 使窗口居中
AfxGetMainWnd()-> ShowWindow(SW_MAXIMIZE) ; // 最大化
m_hWnd 是基类CWnd 的成员变量,其定义为HWND m_hWnd,就是窗口句柄。所以上面函数中的显示语句可以写成另一种形式:AfxGetMainWnd()->SetDlgItemText(IDC_TIME,strTime);
(3)通过AfxGetApp( )
AfxGetApp( )这个函数可以得到当前应用进程的指针,是CWinApp*类型的,通过这个指针可以访问到这个进程中的对象。
比如在全局函数中要向对话框中的列表写数据。
void writeString(char* pString)
{
CWnd* pWnd = AfxGetApp()->GetMainWnd();
CMyDlg * pDlg;
pDlg=(CMyDlg *) pWnd;
pDlg->ShowMsg(pString);
}
AfxGetApp( )这个函数可以得到当前引用的指针CWinApp*,通过这个指针可以访问到这个进程中的对象。
(4)全局变量
参考原文:http://topic.csdn.net/t/20050421/12/3954786.html
参考原文:http://blog.csdn.net/tianmeshi/archive/2009/05/22/4209904.aspx
- 全局函数如何访问对话框控件
- 全局函数如何访问对话框控件
- VS2005 MFC 对话框 全局函数访问成员变量
- 子对话框如何访问主对话框中的控件
- VC多线程中全局函数如何调用对话框类成员变量及成员函数
- 访问对话框控件的方式
- 菜鸟学习笔记:全局函数中如何获取当前对话框指针
- [MFC]在程序中访问对话框中的控件——GetDlgItem函数
- 有关对话框控件的函数
- 全局函数访问类成员方法
- VC技术 (对话框访问控件的方法)
- 对话框控件访问的七种方式
- 对话框控件访问七种方式
- 访问对话框控件的7种方式
- 对话框控件的七种访问方式
- 对话框控件访问七种方式
- VC:对话框控件访问七种方式
- C++语言 访问对话框中的控件
- C++语言和库支持
- PKCS标准详解。
- 在Browser Application中使用XNA
- fedora系统的时间同步
- 得到屏幕大小的方法大全(你知道有几种?)
- 全局函数如何访问对话框控件
- 浮点数与零的比较
- Qt连接PostgreSQL的驱动安装方法
- Linux 的两种引导程序 LILO 和GRUB 简介
- Eclipse 快捷键
- .net刷新页面的几种方式
- Linux引导程序 grub简介
- 在硬盘上运行Fedora Linux 9 LiveCD方法
- MeeGo移动应用程序开发入门