做输入,输出.有无用SDK编写的对话框的范例,请贴一份.
谢谢!
我在北京,希望能有机会和大家一起交流,共同进步.
email:wfsong@263.net
5 个解决方案
#1
我想基于MFC写可能会好一些.
因为我们平时写一些程序可能只用到MFC的框架,其他还是用的SDK的API.
其实MFC只是在SDK的基础上封了薄薄的一层,把C调用改成了C++调用而已,直接使用API更爽.
因为我们平时写一些程序可能只用到MFC的框架,其他还是用的SDK的API.
其实MFC只是在SDK的基础上封了薄薄的一层,把C调用改成了C++调用而已,直接使用API更爽.
#2
MFC的头文件比较复杂,而且相互之间依赖性较大,可能还没做就被各种Undefine弄昏了。
一般在MFC中用SDK比较常见。
如果用SDK写对话框,程序如下:
/* Test4.cpp */
#include <windows.h>
#include <stdio.h>
#include "resource.h"
LRESULT CALLBACK DialogProc(
HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hwnd ;
MSG msg ;
WNDCLASS cs = { CS_HREDRAW | CS_VREDRAW,
DialogProc,
0,
DLGWINDOWEXTRA, //Note!!Must be this
hInstance,
LoadIcon(NULL,IDI_APPLICATION),
LoadCursor(NULL,IDC_ARROW),
(HBRUSH)(COLOR_BTNFACE+1),
NULL,
"IDD_TEST4_DIALOG"};
RegisterClass(&cs);
hwnd = CreateDialog (hInstance, MAKEINTRESOURCE(IDD_TEST4_DIALOG), NULL, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
// message WM_QUIT cause function GetMessage return 0
while(GetMessage(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam ;
}
LRESULT CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDOK:
case IDCANCEL:
PostQuitMessage (0) ;
return TRUE;
}
break;
case WM_DESTROY:
PostQuitMessage (0) ;
return TRUE;
}
return DefWindowProc(hwndDlg,uMsg,wParam,lParam);
}
/* Test4.rc */
/*注意:IDD_TEST4_DIALOG 的窗口类被设成了CLASS "IDD_TEST4_DIALOG",也就是使用在Test4.cpp里注册的窗口类创建Dialog*/
#include "resource.h"
#include "afxres.h"
IDD_TEST4_DIALOG DIALOGEX 0, 0, 320, 113
STYLE DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Test4"
CLASS "IDD_TEST4_DIALOG"
FONT 9, "宋体"
BEGIN
DEFPUSHBUTTON "Close",IDOK,200,7,113,18
EDITTEXT IDC_EDIT1,7,19,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT2,99,19,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT5,7,90,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT4,99,54,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT3,7,54,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT6,99,90,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
LISTBOX IDC_LIST1,199,32,114,74,NOT LBS_NOTIFY |
LBS_NOINTEGRALHEIGHT | WS_TABSTOP
LTEXT "IDC_EDIT1:",IDC_STATIC,7,7,41,8
LTEXT "IDC_EDIT2:",IDC_STATIC,99,7,41,8
LTEXT "IDC_EDIT3:",IDC_STATIC,7,41,41,8
LTEXT "IDC_EDIT4:",IDC_STATIC,99,39,41,8
LTEXT "IDC_EDIT5:",IDC_STATIC,7,78,41,8
LTEXT "IDC_EDIT6:",IDC_STATIC,99,78,41,8
END
/* resource.h */
// Used by Test4.rc
//
#define IDD_TEST4_DIALOG 102
#define IDR_MAINFRAME 128
#define IDC_EDIT1 1000
#define IDC_EDIT2 1001
#define IDC_EDIT3 1002
#define IDC_EDIT4 1003
#define IDC_EDIT5 1004
#define IDC_EDIT6 1005
#define IDC_LIST1 1012
一般在MFC中用SDK比较常见。
如果用SDK写对话框,程序如下:
/* Test4.cpp */
#include <windows.h>
#include <stdio.h>
#include "resource.h"
LRESULT CALLBACK DialogProc(
HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hwnd ;
MSG msg ;
WNDCLASS cs = { CS_HREDRAW | CS_VREDRAW,
DialogProc,
0,
DLGWINDOWEXTRA, //Note!!Must be this
hInstance,
LoadIcon(NULL,IDI_APPLICATION),
LoadCursor(NULL,IDC_ARROW),
(HBRUSH)(COLOR_BTNFACE+1),
NULL,
"IDD_TEST4_DIALOG"};
RegisterClass(&cs);
hwnd = CreateDialog (hInstance, MAKEINTRESOURCE(IDD_TEST4_DIALOG), NULL, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
// message WM_QUIT cause function GetMessage return 0
while(GetMessage(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam ;
}
LRESULT CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDOK:
case IDCANCEL:
PostQuitMessage (0) ;
return TRUE;
}
break;
case WM_DESTROY:
PostQuitMessage (0) ;
return TRUE;
}
return DefWindowProc(hwndDlg,uMsg,wParam,lParam);
}
/* Test4.rc */
/*注意:IDD_TEST4_DIALOG 的窗口类被设成了CLASS "IDD_TEST4_DIALOG",也就是使用在Test4.cpp里注册的窗口类创建Dialog*/
#include "resource.h"
#include "afxres.h"
IDD_TEST4_DIALOG DIALOGEX 0, 0, 320, 113
STYLE DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Test4"
CLASS "IDD_TEST4_DIALOG"
FONT 9, "宋体"
BEGIN
DEFPUSHBUTTON "Close",IDOK,200,7,113,18
EDITTEXT IDC_EDIT1,7,19,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT2,99,19,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT5,7,90,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT4,99,54,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT3,7,54,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT6,99,90,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
LISTBOX IDC_LIST1,199,32,114,74,NOT LBS_NOTIFY |
LBS_NOINTEGRALHEIGHT | WS_TABSTOP
LTEXT "IDC_EDIT1:",IDC_STATIC,7,7,41,8
LTEXT "IDC_EDIT2:",IDC_STATIC,99,7,41,8
LTEXT "IDC_EDIT3:",IDC_STATIC,7,41,41,8
LTEXT "IDC_EDIT4:",IDC_STATIC,99,39,41,8
LTEXT "IDC_EDIT5:",IDC_STATIC,7,78,41,8
LTEXT "IDC_EDIT6:",IDC_STATIC,99,78,41,8
END
/* resource.h */
// Used by Test4.rc
//
#define IDD_TEST4_DIALOG 102
#define IDR_MAINFRAME 128
#define IDC_EDIT1 1000
#define IDC_EDIT2 1001
#define IDC_EDIT3 1002
#define IDC_EDIT4 1003
#define IDC_EDIT5 1004
#define IDC_EDIT6 1005
#define IDC_LIST1 1012
#3
MFC 把复杂的事情 变容易了,
MFC 把清楚的事情 变糊涂了。
MFC 把清楚的事情 变糊涂了。
#4
to tramfer:
你可以直接在SDK程序中加入资源文件,然后放入对话框,放好控件,最后在程序中调用CreateWindow就行了。
另外:你没有《Windows程序设计》吗?那上面有一些很好的例子,找朋友借借吧
你可以直接在SDK程序中加入资源文件,然后放入对话框,放好控件,最后在程序中调用CreateWindow就行了。
另外:你没有《Windows程序设计》吗?那上面有一些很好的例子,找朋友借借吧
#5
这个问题不算解决了吧,在sdk工程中的确是可以用资源编辑器编辑如对话框之类的资源,但是并不能由wizard来自动产生mfc中复杂的消息映射宏之类,所以对对话框的操作仍然得自己添加相应的回调函数等,从这个角度讲,在win32 application中是不能调用MFC中这些有关界面相应的类的,那么,如果有一个win32 application,仅想在其中调用如CFile,CStdioFile这些文件操作的类,那么把winzard自动生成的stdafx.h中的#include <windows.h>改成#include <afxwin.h>或#include <afx.h>就可以了。唉,说了半天都忘了原来准备说什么了!
#1
我想基于MFC写可能会好一些.
因为我们平时写一些程序可能只用到MFC的框架,其他还是用的SDK的API.
其实MFC只是在SDK的基础上封了薄薄的一层,把C调用改成了C++调用而已,直接使用API更爽.
因为我们平时写一些程序可能只用到MFC的框架,其他还是用的SDK的API.
其实MFC只是在SDK的基础上封了薄薄的一层,把C调用改成了C++调用而已,直接使用API更爽.
#2
MFC的头文件比较复杂,而且相互之间依赖性较大,可能还没做就被各种Undefine弄昏了。
一般在MFC中用SDK比较常见。
如果用SDK写对话框,程序如下:
/* Test4.cpp */
#include <windows.h>
#include <stdio.h>
#include "resource.h"
LRESULT CALLBACK DialogProc(
HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hwnd ;
MSG msg ;
WNDCLASS cs = { CS_HREDRAW | CS_VREDRAW,
DialogProc,
0,
DLGWINDOWEXTRA, //Note!!Must be this
hInstance,
LoadIcon(NULL,IDI_APPLICATION),
LoadCursor(NULL,IDC_ARROW),
(HBRUSH)(COLOR_BTNFACE+1),
NULL,
"IDD_TEST4_DIALOG"};
RegisterClass(&cs);
hwnd = CreateDialog (hInstance, MAKEINTRESOURCE(IDD_TEST4_DIALOG), NULL, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
// message WM_QUIT cause function GetMessage return 0
while(GetMessage(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam ;
}
LRESULT CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDOK:
case IDCANCEL:
PostQuitMessage (0) ;
return TRUE;
}
break;
case WM_DESTROY:
PostQuitMessage (0) ;
return TRUE;
}
return DefWindowProc(hwndDlg,uMsg,wParam,lParam);
}
/* Test4.rc */
/*注意:IDD_TEST4_DIALOG 的窗口类被设成了CLASS "IDD_TEST4_DIALOG",也就是使用在Test4.cpp里注册的窗口类创建Dialog*/
#include "resource.h"
#include "afxres.h"
IDD_TEST4_DIALOG DIALOGEX 0, 0, 320, 113
STYLE DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Test4"
CLASS "IDD_TEST4_DIALOG"
FONT 9, "宋体"
BEGIN
DEFPUSHBUTTON "Close",IDOK,200,7,113,18
EDITTEXT IDC_EDIT1,7,19,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT2,99,19,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT5,7,90,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT4,99,54,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT3,7,54,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT6,99,90,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
LISTBOX IDC_LIST1,199,32,114,74,NOT LBS_NOTIFY |
LBS_NOINTEGRALHEIGHT | WS_TABSTOP
LTEXT "IDC_EDIT1:",IDC_STATIC,7,7,41,8
LTEXT "IDC_EDIT2:",IDC_STATIC,99,7,41,8
LTEXT "IDC_EDIT3:",IDC_STATIC,7,41,41,8
LTEXT "IDC_EDIT4:",IDC_STATIC,99,39,41,8
LTEXT "IDC_EDIT5:",IDC_STATIC,7,78,41,8
LTEXT "IDC_EDIT6:",IDC_STATIC,99,78,41,8
END
/* resource.h */
// Used by Test4.rc
//
#define IDD_TEST4_DIALOG 102
#define IDR_MAINFRAME 128
#define IDC_EDIT1 1000
#define IDC_EDIT2 1001
#define IDC_EDIT3 1002
#define IDC_EDIT4 1003
#define IDC_EDIT5 1004
#define IDC_EDIT6 1005
#define IDC_LIST1 1012
一般在MFC中用SDK比较常见。
如果用SDK写对话框,程序如下:
/* Test4.cpp */
#include <windows.h>
#include <stdio.h>
#include "resource.h"
LRESULT CALLBACK DialogProc(
HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hwnd ;
MSG msg ;
WNDCLASS cs = { CS_HREDRAW | CS_VREDRAW,
DialogProc,
0,
DLGWINDOWEXTRA, //Note!!Must be this
hInstance,
LoadIcon(NULL,IDI_APPLICATION),
LoadCursor(NULL,IDC_ARROW),
(HBRUSH)(COLOR_BTNFACE+1),
NULL,
"IDD_TEST4_DIALOG"};
RegisterClass(&cs);
hwnd = CreateDialog (hInstance, MAKEINTRESOURCE(IDD_TEST4_DIALOG), NULL, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
// message WM_QUIT cause function GetMessage return 0
while(GetMessage(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam ;
}
LRESULT CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDOK:
case IDCANCEL:
PostQuitMessage (0) ;
return TRUE;
}
break;
case WM_DESTROY:
PostQuitMessage (0) ;
return TRUE;
}
return DefWindowProc(hwndDlg,uMsg,wParam,lParam);
}
/* Test4.rc */
/*注意:IDD_TEST4_DIALOG 的窗口类被设成了CLASS "IDD_TEST4_DIALOG",也就是使用在Test4.cpp里注册的窗口类创建Dialog*/
#include "resource.h"
#include "afxres.h"
IDD_TEST4_DIALOG DIALOGEX 0, 0, 320, 113
STYLE DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Test4"
CLASS "IDD_TEST4_DIALOG"
FONT 9, "宋体"
BEGIN
DEFPUSHBUTTON "Close",IDOK,200,7,113,18
EDITTEXT IDC_EDIT1,7,19,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT2,99,19,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT5,7,90,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT4,99,54,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT3,7,54,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT6,99,90,83,16,ES_AUTOHSCROLL | ES_WANTRETURN
LISTBOX IDC_LIST1,199,32,114,74,NOT LBS_NOTIFY |
LBS_NOINTEGRALHEIGHT | WS_TABSTOP
LTEXT "IDC_EDIT1:",IDC_STATIC,7,7,41,8
LTEXT "IDC_EDIT2:",IDC_STATIC,99,7,41,8
LTEXT "IDC_EDIT3:",IDC_STATIC,7,41,41,8
LTEXT "IDC_EDIT4:",IDC_STATIC,99,39,41,8
LTEXT "IDC_EDIT5:",IDC_STATIC,7,78,41,8
LTEXT "IDC_EDIT6:",IDC_STATIC,99,78,41,8
END
/* resource.h */
// Used by Test4.rc
//
#define IDD_TEST4_DIALOG 102
#define IDR_MAINFRAME 128
#define IDC_EDIT1 1000
#define IDC_EDIT2 1001
#define IDC_EDIT3 1002
#define IDC_EDIT4 1003
#define IDC_EDIT5 1004
#define IDC_EDIT6 1005
#define IDC_LIST1 1012
#3
MFC 把复杂的事情 变容易了,
MFC 把清楚的事情 变糊涂了。
MFC 把清楚的事情 变糊涂了。
#4
to tramfer:
你可以直接在SDK程序中加入资源文件,然后放入对话框,放好控件,最后在程序中调用CreateWindow就行了。
另外:你没有《Windows程序设计》吗?那上面有一些很好的例子,找朋友借借吧
你可以直接在SDK程序中加入资源文件,然后放入对话框,放好控件,最后在程序中调用CreateWindow就行了。
另外:你没有《Windows程序设计》吗?那上面有一些很好的例子,找朋友借借吧
#5
这个问题不算解决了吧,在sdk工程中的确是可以用资源编辑器编辑如对话框之类的资源,但是并不能由wizard来自动产生mfc中复杂的消息映射宏之类,所以对对话框的操作仍然得自己添加相应的回调函数等,从这个角度讲,在win32 application中是不能调用MFC中这些有关界面相应的类的,那么,如果有一个win32 application,仅想在其中调用如CFile,CStdioFile这些文件操作的类,那么把winzard自动生成的stdafx.h中的#include <windows.h>改成#include <afxwin.h>或#include <afx.h>就可以了。唉,说了半天都忘了原来准备说什么了!