怎么用SDK API创建一个模式和非模式窗口.只用SDK API 实现,请指点一下.用VC和BCB都很容易,SDK怎么做 怎么用SDK API创建一个模式和非模式窗口.只用SDK API 实现,请指点一下.用VC和BCB都很容易,SDK怎么做. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 use DialogBox and CreateDialog APIs, seehttp://cpp.enisoc.com/articles/dialogs/ 摸态:用DialogBox(HINSTANCE, ID, HPWND, DIALOGPROC)创建,并自动显示.(如果在资源中定义为WS_VISIBLE风格)在对话框窗口函数中退出消息中,用EndDialog(hwndDlg, LOWORD(wParam)) 。非摸态:用CreateDialog(HINSTANCE, ID, HPWND, DIALOGPROC)创建显示,用WS_VISIBLE风格则自动显示,否则需要调用ShowWindwo(hwnd, nCmdShow)显示。在对话框过程退出消息中,用DestroyWindow(hwndDlg)结束这两种形式的对话框处理的消息基本相同,可以处理WM_INITDIALOG消息,其他消息基本和窗口消息相似。非摸态对话框在消息循环处理上有一点区别如:while(GetMessage(&msg, 0, 0)){ if(!hDlg || !IsDialogMessage(hDlg,&msg)) TranslateMessage(&msg); DespatchMessage(&msg);} I never tried, but you might want to try the suggestion in this post:http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&selm=34f899ba.1679575%40forums.sybase.com http://community.csdn.net/Expert/topic/3229/3229267.xml?temp=.5224268 假设 窗口A 先出现, 再出现 窗口B , 如果 想要B达到模式对话框的效果,可以在 窗口B 出现的时候 把 A disable 掉 然后当B 销毁或消隐的时候再enable A 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"/////////////////////////////////////////////////////////////////////////////// DialogABOUTBOX DIALOG DISCARDABLE 32, 32, 180, 100STYLE DS_MODALFRAME | WS_POPUPFONT 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,8END/////////////////////////////////////////////////////////////////////////////// MenuABOUT1 MENU DISCARDABLE BEGIN POPUP "&Help" BEGIN MENUITEM "&About About1...", IDM_APP_ABOUT ENDEND/////////////////////////////////////////////////////////////////////////////// IconABOUT1 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 变量的声明位置 象QQ这类软件,所有控件都是自已做的,不是标准控件,有什么必要呢? MFC与静态库 CButtonST不显示Caption的问题 如何在vc里面将 下面的代码完成转换? 初学“不规则窗口的实现”中出现的问题 ado远程连接sql server时,不同所有者的表的察看问题 有什么软件公司招毕业生?? 请问哪里有好的界面解决方案? SetUnhandledExceptionFilter为什么在VS2008无效? 一个有趣的编译错误(高手请进,在线等待) 求助:DC的问题!
EndDialog(hwndDlg, LOWORD(wParam)) 。非摸态:用CreateDialog(HINSTANCE, ID, HPWND, DIALOGPROC)创建显示,用WS_VISIBLE风格则自动显示,否则需要调用ShowWindwo(hwnd, nCmdShow)显示。
在对话框过程退出消息中,用DestroyWindow(hwndDlg)结束这两种形式的对话框处理的消息基本相同,
可以处理WM_INITDIALOG消息,其他消息基本和窗口消息相似。非摸态对话框在消息循环处理上有一点区别如:
while(GetMessage(&msg, 0, 0))
{
if(!hDlg || !IsDialogMessage(hDlg,&msg))
TranslateMessage(&msg);
DespatchMessage(&msg);
}
假设 窗口A 先出现, 再出现 窗口B , 如果 想要B达到模式对话框的效果,可以在 窗口B 出现的时候 把 A disable 掉 然后当B 销毁或消隐的时候再enable A
/*------------------------------------------------------------------------
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