[对话]对话框的问题
09月 17th, 2008 by admin
Posted in VC/MFC | No Comments »
在一个主对话框中建一个非模态对话框
在主对话框中点击一个按钮,然后在那个非模态对话框中的编辑框中显示出来
这怎么实现,麻烦各位大虾指导的详细点
大哥还是感谢你!
可能我没说得很清楚
你没明白我的意思
不过我已经搞定了
怪我 太晚了 看东西都迷糊了 嘿嘿
搞定就好
[对话][程序][依次]MFC对话框程序是如何依次执行的
09月 16th, 2008 by admin
Posted in VC/MFC | No Comments »
MFC对话框程序建立后,主要包含::OnInitDialog(),::OnPaint(),::OnQueryDragIcon()等。
1.如果我想一运行程序就自动执行某个函数,是不是要把这个函数放在OnPaint()里?
2.我这样试了一下,好像OnPaint不停再画,导致我想执行的函数不停的再执行,如果我就想执行一遍,该怎么办?
立即执行放OnInitDialog
延时重复执行放OnTimer
appOnInit
OnInitDialog
放在OnInitDialog
…
我一开始也是向大家说的,放在OnInitial里面。不过出现了问题,我把代码贴出来一些,大家帮着看看:
BOOL CDelayStabilityDlg::OnInitDialog()
{
CDataDisplay_BaseDlg::OnInitDialog();
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
/*下面是我要运行的程序*/
CDataDisplay_BaseDlg::abc();
return;
}
void CDataDisplay_BaseDlg::abc()
{
MessageBox("123");
}
意思就是说我要运行的程序,是我定义在CDelayStabilityDlg这个类里面的另一个成员函数。如果我直接在OnInitDialog
里面运行,会弹出那个窗口(终止、重试、取消)。如果放在OnPaint里面就没事。是不是因为OnInitDialog 这个函数执行的时候,窗口还没有被创建,里面的成员函数还不能用?
我又试了试,放在OnInitial里面可以了,谢谢大家,散分了
[退出][模式][对话]退出无模式对话框时弹出内存不能为read提示框
09月 15th, 2008 by admin
Posted in VC/MFC | No Comments »
无模式窗口CPP文件如下:
// DialogLessChild.cpp : implementation file
//
#include "stdafx.h"
#include "dialogless.h"
#include "DialogLessChild.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// DialogLessChild dialog
DialogLessChild::DialogLessChild(CWnd* pParent /*=NULL*/)
: CDialog(DialogLessChild::IDD, pParent)
{
//{{AFX_DATA_INIT(DialogLessChild)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_parentwnd=pParent;
}
void DialogLessChild::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(DialogLessChild)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(DialogLessChild, CDialog)
//{{AFX_MSG_MAP(DialogLessChild)
ON_BN_CLICKED(IDC_CLOSE, OnClose)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// DialogLessChild message handlers
void DialogLessChild::OnClose()
{
// TODO: Add your control notification handler code here
this->DestroyWindow();
this->m_parentwnd->SendMessage(WM_dlgquit,0,LPARAM(this->m_hWnd));
}
主窗口CPP文件如下:
// dialoglessDlg.cpp : implementation file
//
#include "stdafx.h"
#include "dialogless.h"
#include "dialoglessDlg.h"
#include "DialogLessChild.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDialoglessDlg dialog
CDialoglessDlg::CDialoglessDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDialoglessDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CDialoglessDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CDialoglessDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDialoglessDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDialoglessDlg, CDialog)
//{{AFX_MSG_MAP(CDialoglessDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_OPEN, OnOpen)
ON_MESSAGE(WM_dlgquit,MyQuitFunction)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDialoglessDlg message handlers
BOOL CDialoglessDlg::OnInitDialog()
{
CDialog::OnInitDialog();
pLessChild=NULL;
// Add "About…" menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CDialoglessDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CDialoglessDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CDialoglessDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CDialoglessDlg::OnOpen()
{
// TODO: Add your control notification handler code here
DialogLessChild* MyDialogLessChild = new DialogLessChild();
MyDialogLessChild->Create(IDD_DIALOG1);
MyDialogLessChild->ShowWindow(SW_SHOW);
}
LRESULT CDialoglessDlg::MyQuitFunction(WPARAM wParam, LPARAM lParam)
{
HWND hwnd = (HWND)lParam;
if (this->pLessChild != NULL && this->pLessChild->m_hWnd == hwnd)
{
delete this->pLessChild;
this->pLessChild = NULL;
}
return 0L;
}
void CDialoglessDlg::OnDestroy()
{
CDialog::OnDestroy();
if (this->pLessChild != NULL)
{
delete this->pLessChild;
this->pLessChild = NULL;
}
// TODO: Add your message handler code here
}
红色部分是相关函数,不知道问题出在哪里,请大家指教
[对话][同一][量值]多对话框中同一变量值的问题
09月 13th, 2008 by admin
Posted in VC/MFC | No Comments »
在多对话框中我只找到了一种方法调用变量值.例如MFC程序中有两个对话框,其中有一个变量在其中的一个对话框中.但另外一个对话框也想利用这个变量.这时就涉及到了变量的传送问题.因为两对话框是两个不同的类.类与类之间可以通过对象来调用类的成员函数.在成员函数中我们可以设计它的返回值为该变量的值.
但除了这种方法外还有其它更好的方法吗?
还是用成员函数改变变量值的方法比较好。
在app类里放一个成员变量
要么两个对话框各自使用各自的变量,在初始化的时候你set一下变量的值
要么用另一个类存放该变量,两个对话框都去同一个类去取
发消息过去…哈哈
[屏蔽][对话]屏蔽对话框
09月 8th, 2008 by admin
Posted in VC/MFC | No Comments »
VC中基于对话框程序
如何把对话框屏蔽掉
并不是隐藏
BOOL CTestApp::InitInstance()
{
/* CTestDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
*/}
将蓝色部分代码注释掉不就ok了?
既然基于对话框,为何要屏蔽?
再者屏蔽是什么意思
不要DoModal就行了。。但不太明白楼主的意思。。
达到无界面运行的目的
可又不想用界面隐藏
因为会出现闪烁之类的
是不是说禁用的意思啊
就是让对话框中的控件不可用?
若是 请使用EnableWindow()
注释掉会不会有什么影响?
EnableWindow(flase);
木影响,我经常这么干,呵呵
或者在对话框的初始化里OnOK()就可以了。
问题已解决
接分喽
木有看到谁接分了哦
哦,看到了,网速问题……
[对话]对话框的问题(MFC)
09月 6th, 2008 by admin
Posted in VC/MFC | No Comments »
我新建了一个对话框,对这个对话框建立了一个类
在对话框里面定义了几个按钮,对其中的一些按钮建立了命令响应函数,编译后可以成功运行
我关闭VC后,重新打开这个工作空间,编译时它报错:
——————–Configuration: Mybole2 - Win32 Debug——————–
Linking…
Mybole2View.obj : error LNK2001: unresolved external symbol "public: __thiscall CTestDlg::CTestDlg(class CWnd *)" (??0CTestDlg@@QAE@PAVCWnd@@@Z)
Debug/Mybole2.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
Mybole2.exe - 1 error(s), 0 warning(s)
试了好多次都是这样,不知道为什么?
谁能帮帮我。。谢谢哈
看看你是不是定义并使用了这样的构造函数而没有函数体。
删掉DEBUG目录重新来过。
[对话][刷新]MFC拖动对话框不刷新问题
09月 3rd, 2008 by admin
Posted in VC/MFC | No Comments »
大虾们救救我吧:
我在修改一个软件,是Unicode工程的。
弹出一个模式对话框代码:
CXXXDlg dlg;
dlg.DoModal();
或者弹出一个系统对话框,如打开文件:
CFileDialog dlg(true, _T( "mdb "), filePath+fileName, OFN_HIDEREADONLY, lpszFilter);
if((dlg.DoModal())==IDOK)
{
// ……
}
程序一开始运行时对话框显示正常,但只要拖动它,就变成面目全非了:
关掉这个对话框,再打开,拖动,又正常了。后来发现,只要软件有一个窗口刷新过(如拖动、最大化最小化),就不会出现这种情况。即使出现这种情况,只要在任务栏暂时切换其它程序,再切换过来就显示正常。
这个工程的全部模态对话框都这样,但非模态则正常。观看其它代码,没有发现不对的地方(代码太多也没看完)。主窗口打开前创建了好几个非模态对话框,而且用了MoveWindow函数,但这也应该没有问题啊。
这个问题都弄得我快发疯了!网上不断地搜索,不断地翻阅MSDN,就是不知道问题在哪里。各位高手有没有遇到相似的问题啊,或者提供一种解决办法,先谢了。
你要设置好 你关于重绘的代码`~~`
你看看 OnDraw那里面的代码是怎样做的
拖动窗口 对话框发生重绘是一定的
虽然拖动一定会重绘,但一般处理WM_PAINT消息是在空闲处理时.所以要加Invalidate()强制窗体重绘
你会不会把代码写在了OnDraw函数里面了啊??
我的程序没有任何绘制代码,全部用标准的控件。比如CFileDialog,是MFC自带的,但DoModal()后仍会乱七八糟。
[改变][对话][颜色]关于改变对话框颜色的问题!
08月 27th, 2008 by admin
Posted in VC/MFC | No Comments »
CRect rect;
CPaintDC dc(this);
GetDlgItem(IDC_RECT)->GetWindowRect(rect);
dc.FillSolidRect(rect,RGB(255,255,255)); //设置为绿色背景
我想先得到IDC_RECT控件的大小,然后再设置窗口的背景色!
但是程序运行出错!
HBRUSH XXXXXXXXX::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
switch(nCtlColor)
{
case CTLCOLOR_DLG:
return 你的颜色话刷;
break;
default:
break;
}
return hbr;
}
if(nCtlColor == CTLCOLOR_DLG)
{
CBrush *brush;
brush = new CBrush(RGB(20,221,221));
return (HBRUSH)(brush->m_hObject);
}
你的代码连画刷也没,SelectObject也没你拿什么画啊?
[对话][添加][图片]请教大家一个在对话框中添加图片的问题谢谢
08月 26th, 2008 by admin
Posted in VC/MFC | No Comments »
我想在对话框的一半的区域添加一个图片,该用什么方法啊?是用图象控件吗?图象控件该如何用啊?请高手指点,详细说以下,希望给个简单的代码例子,十分感谢
1楼的高手能详细说说吗?
有个CPictuerEx类很好用,可以试下
http://www.codeguru.com/cpp/g-m/bitmap/article.php/c4879/
怎样在Static属里指定使用图片属性,属性的样式下只有样式和边框两个选项可以下拉啊,没有图片属性啊,还有怎样将图片指定到Static啊?高手再指点下,谢谢
SetBitmap
- C/C++ code
-
// MyDlg.h #include "stdafx.h" class CMyDlg : public CDialog { DECLARE_DYNAMIC(CMyDlg) CStatic *m_pImg; CString m_strImagePath; public: CMyDlg(LPCTSTR lpszImagePath); ~CMyDlg(); protected: virtual void DoDataExchange(CDataExchange* pDX); virtual BOOL OnInitDialog(); DECLARE_MESSAGE_MAP() }; // MyDlg.cpp #include "MyDlg.h" IMPLEMENT_DYNAMIC(CMyDlg, CDialog) CMyDlg::CMyDlg(LPCTSTR lpszImagePath) { m_pImg = NULL; m_strImagePath = lpszImagePath; } CMyDlg::~CMyDlg() { if(m_pImg) { if(m_pImg->m_hWnd) { ::DeleteObject(m_pImg->SetBitmap(NULL)); m_pImg->DestroyWindow(); } delete m_pImg; } } BOOL CMyDlg::OnInitDialog() { If(::PathFileExists(m_strImagePath)) // 自己添加相应的库 { HBITMAP hbm = (HBITMAP)::LoadImage(NULL, m_strImagePath, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR|LR_DEFAULTSIZE|LR_LOADFROMFILE); if(hbm != NULL) { CBitmap *pbm = CBitmap::FromHandle(hbm); BITMAP bm = {0}; pbm->GetBitmap(&bm); m_wndBmp = new CStatic; m_wndBmp->Create(NULL, WS_CHILDWINDOW|WS_VISIBLE|SS_BITMAP|SS_CENTERIMAGE, CRect(0,0,bm.bmWidth,bm.bmHeight), this); pbm->Detach(); ::DeleteObject(m_wndBmp->SetBitmap(hbm)); } } }
新手路过,过来学习一下,帮你UP
把picture控件放到对话框中,右击该控件,选择属性,在类型中选择“位图”,在图像选项中选择“你要插入的图片”;
你要插入的图片可以在资源中导入~~~
楼上的方法最简单,LZ只需要准备好需要显示的bmp就OK
1、如果你画的是资源中的一个位图,那你可以用一个图片控件,将其属性中的type设置为Bitmap,然后再在Image属性的下拉列表框中选中你想要加载的那个图片的资源ID,这样图片就已经能显示出来了。
2、如果你是想从磁盘上动态地读取一个图片来显示,为了简单,你在对话框的头文件中引入#include <atlimage.h>,并定义一个读取图片的类成员变量,CImage m_backImage;并在你的对话框的OnInitDialog()函数里添加读取图片的代码,如下:
CString strPath = GetAppPath();//得到当前应用程序的路径,GetAppPath()是我写的一个函数,见后面的定义
backImage.Load(strPath + "\left.jpg");//这里的图片绝对路径你也可以自己设定
然后在对话框的OnPaint函数中添加如下代码:
CDC *pDC = GetDC();
m_backImage.BitBlt(pDC->GetSafeHdc(),100,10);//具体的绘制在什么位置你可以自己设置
ReleaseDC(pDC);
3、在第一种情况下你也可以用第二种方法,不过加载图片时用如下函数:
m_backImage.LoadFromResource(AfxGetResourceHandle(),IDB_BITMAP_LEFT);
10楼强大。1楼的方法也可以啊,而且应该比较详细了。
这个问题我以前也接触过,开始的时候我也找不到问题的原因,后来我进了一个技术交流群,这个群里的人挺多的,在里面可以沟通技术,你可以进去看一下.群号是:五+九+零+四+九+二+六+八。另外,这个群里可以接项目。
http://www.nuli365.com/ShowFile.aspx
test.rar
c盘放一张bmp图片 1.bmp
http://www.nuli365.com/ShowFileData.aspx?ID=369
创建有个性的对话框之MFC篇:
http://blog.csdn.net/orbit/archive/2005/08/23/463071.aspx
http://blog.csdn.net/orbit/archive/2005/08/23/463077.aspx
1楼的方法最简单。
fatal error C1083: Cannot open include file: 'atlimage.h': No such file or directory这个错误怎么改啊?
先在资源中导入需要的图片,取个名,比如取名为IDB_a1,在对话框中添加一个Static控件,设置其属性为图片,图片名为IDB_a1,在调整Static在对话框中的大小和位置
将该文件填加到工程中
fatal error C1083: Cannot open include file: 'atlimage.h': No such file or directory这个错误怎么改啊?
将该文件填加到工程中
10楼的方法正确。
[对话][Active][控件]写个对话框的Active X控件有会做的联系我请看详细介绍
08月 26th, 2008 by admin
Posted in VC/MFC | No Comments »
我用vc++6.0写了一个读卡程序,就是一个简单的对话框程序,里边调用了一个dll,我想将这个简单的对话框程序转化成ActiveX控件,又会做的吗,贡献100分
帮顶。
应该不难,找本教程
也就是说,这个程序的情况,IC卡提供商给我们了一个dll,里边当然封装着对IC卡进行操作的各种函数,然后写一个对话框程序,调用这个dll的函数,将ic卡的卡号读出来。编译完毕后,一点按钮,卡号就出来了。
现在就是要把这个程序写成Active X控件,在网页上 调用
网页调用必须要用证书签名的,买个证书最便宜的都要1000多
难度不大,你用向导生成一个控件工程,大部分代码都是移植过去的,对话框资源和封装类也能移植过去
应该不大,问题是,我不知道控件的方法 怎样获取在控件里添加的对话框类中的数据
外界需要访问什么数据,你都可以定义接口属性来解决;外界需要做某些控制动作,你应该定义接口方法解决。完全看需求。
我应经做出来了,真不容易,以后谁有这方面的需求,做个对话框的控件,欢迎讨论,提供地址http://www.fltvu.com/jiaocheng/chenxu2/Visual%20C++/source%20code/Atl/
不过还是谢谢大家,开始三分了,每个有信息的贴10分。
up
你才来,分应经发完了