MFC VC++6.0 对话框怎么获得文档类中的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC VC++6.0 对话框怎么获得文档类中的数据相关的知识,希望对你有一定的参考价值。

我的目标是:
我插入了一个对话框,生成了一个新类叫ShowDlg,当然,继承的CDilog;里面有一个编辑框和一个显示按钮;
我的C*Doc类里处理了一些数据,想把这些数据传到ShowDlg的编辑框里进行显示;

我想实现的效果是:
先ShowDlg sDlg出一个新对话框,一点击那个显示按钮就在编辑框显示C*Doc类里的数据

我的做法是:
我把按钮响应函数写在ShowDlg.cpp里,再#include "C*Doc.h","C*.h"什么的之后,调用GetDocument();说我的GetDocument()没有定义。。是不是GetDocument()需要其他头文件?

不知道表述清楚没哈,请问各位高手帮忙看看应该怎么解决,或者怎么实现?拜谢。。

可以这样
C*Doc是你原有的一个类,CShowDlg是你的新对话框,假设m_nNum1是CShowDlg的成员变量。那么,很简单的,在C*Doc里这么写:
CShowDlg dlg;
dlg.m_nNum1=10;
dlg.DoModal();
这样对话框就出来了。
在这个新的对话框里,将编辑框关联一个int型变量(比如m_nVar1),添加按钮的响应函数,在函数里写:
m_nVar1=m_nNum1;
UpdateData(FALSE);
就可以了,编辑框显示10。
参考技术A GetDocument()是CView的函数,你的对话框类当然不能调用。
修改你的对话框类的构造函数,将文档指针传入。
CShowDlg dlg(CDocument *pDocument);
得到文档指针了问题就解决了吧?本回答被提问者采纳
参考技术B 用全局变量吧 MFC写代码的时候都不怎么能看到对象的 获取不了
全局变量在sdafx里定义就行了

vc++的mfc怎么控制窗口的最大小最小化还原

比如在双击了托盘图标后就把窗口显示出来,怎么写?
我的问题是窗口已经是最小化了,我是在最小化的时候隐藏的,想要把窗口还原并显示!

void CTIME_POWERDlg::ToTray()


nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

StrCpy(nid.szTip,L"♀冰封星耀♂"); //信息提示条

Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标
ShowWindow(SW_HIDE); //隐藏主窗口


void CTIME_POWERDlg::DeleteTray()

//NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;

nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称

nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

StrCpy(nid.szTip,L"♀冰封星耀♂"); //在任务栏上显示名称,但是不能刷新,所以不能用于显示歌名

Shell_NotifyIcon(NIM_DELETE,&nid); //在托盘区删除图标
ShowWindow(SW_SHOWMAXIMIZED);//New Add Here



这是我以前给我播放器写的代码,有部分是从别人那里转载过来的,不过我已经使用了,肯定能用
第一个是隐藏倒系统栏,第二个是双击系统栏还原
-------------------------------------------------------
汗,我的第二个函数就是从任务栏还原啊,加个最大化
ShowWindow(SW_SHOWMAXIMIZED);这个函数就OK 啦
参考技术A 你既然建立了托盘,那么就会有托盘消息,就是nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称
nid.hWnd=this->m_hWnd;这个就是接收托盘消息的窗口,
在这个窗口类里面响应这个托盘消息,这个托盘消息是自定义的,需自己添加消息映射。在这END_MESSAGE_MAP()之前添加ON_MESSAGE(UM_SHOWMND,WM_SHOWTASK);添加函数onshowtask(WPARAM wparam, LPARAM lparam)
这响应的函数
LRESULT onshowtask(WPARAM wparam, LPARAM lparam)
if(wparam!=IDI_ICON1) return 0;//IDI_ICON1托盘图标nib.uID = IDI_ICON1
switch(lparam)
case WM_LBUTTONDBLCLK:

ShowWindow(SW_SHOWDEFAULT);
或者ShowWindow(SW_SHOW);
UpdateWindow();
break;
return 1;


case WM_LBUTTONDBLCLK这就是鼠标左键在托盘图标上双击后的响应;看你注册托盘时哪个窗口(nid.hWnd=this->m_hWnd)就在哪个窗口了添加LRESULT onshowtask(WPARAM wparam, LPARAM lparam)这个函数,这里告诉了你响应消息的方法,举一反三其它消息也可以响应,如WM_RBUTTONUP右键在托盘图标上弹起。让窗口最大化最小化这些代码应该知道吧,不用讲了。
void CTIME_POWERDlg::DeleteTray()

//NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;

nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称

nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

StrCpy(nid.szTip,L"♀冰封星耀♂"); //在任务栏上显示名称,但是不能刷新,所以不能用于显示歌名

Shell_NotifyIcon(NIM_DELETE,&nid); //在托盘区删除图标
ShowWindow(SW_SHOWMAXIMIZED);//New Add Here


这个方法借鉴一下就可以把托盘删除了
参考技术B 解决方法:
void CTIME_POWERDlg::ToTray()


nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
09-03-19 | 添加评论
0

29735581

void CTIME_POWERDlg::ToTray()


nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

StrCpy(nid.szTip,L"♀冰封星耀♂"); //信息提示条

Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标
ShowWindow(SW_HIDE); //隐藏主窗口


void CTIME_POWERDlg::DeleteTray()

//NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;

nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称

nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

StrCpy(nid.szTip,L"♀冰封星耀♂"); //在任务栏上显示名称,但是不能刷新,所以不能用于显示歌名

Shell_NotifyIcon(NIM_DELETE,&nid); //在托盘区删除图标
ShowWindow(SW_SHOWMAXIMIZED);//New Add Here

参考技术C MFC源文件里面就有啊,

以上是关于MFC VC++6.0 对话框怎么获得文档类中的数据的主要内容,如果未能解决你的问题,请参考以下文章

VC++(MFC)中动态创建和管理按钮控件,怎么做?

openCV在VC6.0中的配置问题

MFC绘图基础——上机操作步骤

vc6.0 mfc窗口问题

VC 6.0 MFC关闭对话框在win7出现崩溃的情况

菜鸟请教:如何在C++6.0的环境下,新建或产生一个MFC文件?