如何在Dilog对话框中按一个button键产生一个简单的Dialog对话框? 如何在Dilog对话框中按一个button键产生一个简单的Dialog对话框? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CDialog MyDialog;MyDialog.DoModal(); 不完全正确.那样只可以创建一个模态对话框.如果要创建一个非模态的对话框要调用xx.creat()函数.-----------2者前提都是你要先创建一个对话框资源----------------------------模态对话框--->这样的对话框出现后,你不点上面的按钮或进行其他的操作让它关闭的话,你就没有办法在原来的对话框上进行操作.非模态对话框---->2个对话框可以共存,2着者之间互相不影响,你可以随时对其中一个进行操作而不要关闭其中一个. CDialog MyDialog;MyDialog.DoModal(); 有两种方式:1)模式对话框: CMyDialog MyDialog; MyDialog.DoModal();2)无模式对话框: CMyDialog* MyDialog; MyDialog = new CMyDialog; ASSERT_VALID(MyDialog); bResult = MyDialog->Create(IDD_DIALOG_MyDialog); MyDialog->ShowWindow(TRUE); 如果用MFC就按楼上的做法。如果要用SDK作,就比较麻烦.如下:ABOUT1.C /*------------------------------------------------------------------------ ABOUT1.C -- About Box Demo Program No. 1 (c) Charles Petzold, 1998 -------------------------------------------------------------------------*/ #include <windows.h> #include "resource.h" LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; BOOL CALLBACK AboutDlgProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("About1") ; MSG msg ; HWND hwnd ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (hInstance, szAppName) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = szAppName ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, TEXT ("About Box Demo Program"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HINSTANCE hInstance ; switch (message) { case WM_CREATE : hInstance = ((LPCREATESTRUCT) lParam)->hInstance ; return 0 ; case WM_COMMAND : switch (LOWORD (wParam)) { case IDM_APP_ABOUT : DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc) ; break ; } return 0 ; case WM_DESTROY : PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; } BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG : return TRUE ; case WM_COMMAND : switch (LOWORD (wParam)) { case IDOK : case IDCANCEL : EndDialog (hDlg, 0) ; return TRUE ; } break ; } return FALSE ; }ABOUT1.RC (摘录) //Microsoft Developer Studio generated resource script. #include "resource.h" #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// // Dialog ABOUTBOX DIALOG DISCARDABLE 32, 32, 180, 100 STYLE DS_MODALFRAME | WS_POPUP FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,66,80,50,14 ICON "ABOUT1",IDC_STATIC,7,7,21,20 CTEXT "About1",IDC_STATIC,40,12,100,8 CTEXT "About Box Demo Program",IDC_STATIC,7,40,166,8 CTEXT "(c) Charles Petzold, 1998",IDC_STATIC,7,52,166,8 END ///////////////////////////////////////////////////////////////////////////// // Menu ABOUT1 MENU DISCARDABLE BEGIN POPUP "&Help" BEGIN MENUITEM "&About About1...", IDM_APP_ABOUT END END ///////////////////////////////////////////////////////////////////////////// // Icon ABOUT1 ICON DISCARDABLE "About1.ico" RESOURCE.H (摘录) // Microsoft Developer Studio generated include file. // Used by About1.rc #define IDM_APP_ABOUT 40001 #define IDC_STATIC -1 如果用对话框,不必那么麻烦假设有对话框资源IDD_DIALOG1如下:HWND ghDialog;//初始化函数或事件中:ghDialog = CreateDialog(hInst,(LPCTSTR)IDDF_DIALOG1,hParent,(DLGPROC)dlgProc);ShowWindow(ghDialog,SW_SHOW);//当程序结束时if(IsWindow(ghDialog)) DestoryWindow(ghDialog);//加对话框的过程BOOL CALLBACK dlgPorc(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam){ switch(msg) { case WM_INITDIALOG: return TRUE; case WM_CLOSE: EndDialog(hDlg,1); return TRUE; }retur FALSE;} 回复人: tigergt() ( ) 信誉:100 2005-01-22 11:49:00 得分: 0 有两种方式:1)模式对话框: CMyDialog MyDialog; MyDialog.DoModal();2)无模式对话框: CMyDialog* MyDialog; MyDialog = new CMyDialog; ASSERT_VALID(MyDialog); bResult = MyDialog->Create(IDD_DIALOG_MyDialog); MyDialog->ShowWindow(TRUE); CTreeViewCtrl(CTreeCtrl) Expand 模拟屏幕打印键 字符串取反 如何用VC6.0做出XP风格的界面? 为什么我写了个dll在其中调用create new出一个对象,调用destroy delete它,但老是有这样的错误 ,Debug Error!,Damage:after Normal block 我问个小问题,关于字符串 关于dll的问题 extern的初级问题。 求救!手工建立的工具栏的显示错误 mfc中button的notify属性有什么作用? 怎么样在MainFrame中获取Document的成员? 各位高手帮忙,如何在动态库中实现单文档模板类的窗口?
MyDialog.DoModal();
如果要创建一个非模态的对话框要调用xx.creat()函数.
-----------
2者前提都是你要先创建一个对话框资源
----------------------------
模态对话框--->这样的对话框出现后,你不点上面的按钮或进行其他的操作让它关闭的话,你就没有办法在原来的对话框上进行操作.
非模态对话框---->2个对话框可以共存,2着者之间互相不影响,你可以随时对其中一个进行操作而不要关闭其中一个.
MyDialog.DoModal();
1)模式对话框:
CMyDialog MyDialog;
MyDialog.DoModal();
2)无模式对话框:
CMyDialog* MyDialog;
MyDialog = new CMyDialog;
ASSERT_VALID(MyDialog);
bResult = MyDialog->Create(IDD_DIALOG_MyDialog);
MyDialog->ShowWindow(TRUE);
如果要用SDK作,就比较麻烦.如下:
ABOUT1.C
/*------------------------------------------------------------------------
ABOUT1.C -- About Box Demo Program No. 1
(c) Charles Petzold, 1998
-------------------------------------------------------------------------*/
#include <windows.h>
#include "resource.h"
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
BOOL CALLBACK AboutDlgProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("About1") ;
MSG msg ;
HWND hwnd ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (hInstance, szAppName) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = szAppName ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("About Box Demo Program"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HINSTANCE hInstance ;
switch (message)
{
case WM_CREATE :
hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
return 0 ;
case WM_COMMAND :
switch (LOWORD (wParam))
{
case IDM_APP_ABOUT :
DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc) ;
break ;
}
return 0 ;
case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG :
return TRUE ;
case WM_COMMAND :
switch (LOWORD (wParam))
{
case IDOK :
case IDCANCEL :
EndDialog (hDlg, 0) ;
return TRUE ;
}
break ;
}
return FALSE ;
}
ABOUT1.RC (摘录)
//Microsoft Developer Studio generated resource script.
#include "resource.h"
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
// Dialog
ABOUTBOX DIALOG DISCARDABLE 32, 32, 180, 100
STYLE DS_MODALFRAME | WS_POPUP
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,66,80,50,14
ICON "ABOUT1",IDC_STATIC,7,7,21,20
CTEXT "About1",IDC_STATIC,40,12,100,8
CTEXT "About Box Demo Program",IDC_STATIC,7,40,166,8
CTEXT "(c) Charles Petzold,
1998",IDC_STATIC,7,52,166,8
END
/////////////////////////////////////////////////////////////////////////////
// Menu
ABOUT1 MENU DISCARDABLE
BEGIN
POPUP "&Help"
BEGIN
MENUITEM "&About About1...", IDM_APP_ABOUT
END
END
/////////////////////////////////////////////////////////////////////////////
// Icon
ABOUT1 ICON DISCARDABLE "About1.ico"
RESOURCE.H (摘录)
// Microsoft Developer Studio generated include file.
// Used by About1.rc
#define IDM_APP_ABOUT 40001
#define IDC_STATIC -1
假设有对话框资源IDD_DIALOG1
如下:
HWND ghDialog;//初始化函数或事件中:
ghDialog = CreateDialog(hInst,(LPCTSTR)IDDF_DIALOG1,hParent,(DLGPROC)dlgProc);
ShowWindow(ghDialog,SW_SHOW);//当程序结束时
if(IsWindow(ghDialog))
DestoryWindow(ghDialog);//加对话框的过程
BOOL CALLBACK dlgPorc(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_INITDIALOG:
return TRUE;
case WM_CLOSE:
EndDialog(hDlg,1);
return TRUE;
}
retur FALSE;
}
有两种方式:
1)模式对话框:
CMyDialog MyDialog;
MyDialog.DoModal();
2)无模式对话框:
CMyDialog* MyDialog;
MyDialog = new CMyDialog;
ASSERT_VALID(MyDialog);
bResult = MyDialog->Create(IDD_DIALOG_MyDialog);
MyDialog->ShowWindow(TRUE);