我最近学SDK编程,但碰到问题。
我把定义、注册、CreateWindow、显示消息循环的过程改为
CreateDialog(hInstance,MAKEINTRESOURCE(IDD,_DIALOG1),NULL,NULL);显示\消息循环
问题1 :产生了不能关闭的问题(右上角的按钮图标)。
问题2 :调用DialogBox产生的子窗口所有的控件对象都不能用。
问题3 :窗口类是不是必需的?即使基于对话框的应用程序
我把定义、注册、CreateWindow、显示消息循环的过程改为
CreateDialog(hInstance,MAKEINTRESOURCE(IDD,_DIALOG1),NULL,NULL);显示\消息循环
问题1 :产生了不能关闭的问题(右上角的按钮图标)。
问题2 :调用DialogBox产生的子窗口所有的控件对象都不能用。
问题3 :窗口类是不是必需的?即使基于对话框的应用程序
HWND hDlgWnd;
BOOL CALLBACK DialogFunc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hThisInstance,HINSTANCE hPrevInstance,char *lpCmdLine,int nShowCmd)
{
MSG msg; hDlgWnd=CreateDialog(hThisInstance,"Dialog1",NULL,(DLGPROC)DialogFunc);
while (GetMessage(&msg,NULL,0,0)) {
if (!IsDialogMessage(hDlgWnd,&msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}BOOL CALLBACK DialogFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch (message) {
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDCANCEL:
DestroyWindow(hwnd);
PostQuitMessage(0);
return TRUE;
}
break;
}
return FALSE;
}
{
HWND hWnd;
MSG msg;
hInst = hInstance;
hWnd = CreateDialog(hInst,IDD_DIALOG1,NULL,(DLGPROC)testProc);
if( !hWnd ) return FALSE;
ShowWindow(hWnd,nCmdShow);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK testProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
HWND hwndn;
HDC hdc;
PAINTSTRUCT ps;
HINSTANCE hW;
int a;
switch( message ) {
case WM_KEYDOWN://击键消息
switch( wParam ) {
case VK_ESCAPE:
MessageBox(hWnd,"ESC键按下了!","Keyboard",MB_OK);
break;
}
break;
case WM_RBUTTONDOWN://鼠标消息
{
MessageBox(hWnd,"鼠标右键按下了!","Mouse",MB_OK);
break;
} case WM_PAINT://窗口重画消息
{
char hello[]="你好,我是EasyWin !";
HDC hdc;
PAINTSTRUCT ps;
hdc=BeginPaint( hWnd,&ps ); //取得设备环境句柄
SetTextColor(hdc, RGB(0,0,255)); //设置文字颜色
TextOut( hdc, 20, 10, hello, strlen(hello) );//输出文字
EndPaint( hWnd, &ps ); //释放资源
break;
}
break;
case WM_DESTROY://退出消息
PostQuitMessage( 0 );//调用退出函数
break;
case WM_CLOSE:
PostQuitMessage( 0 );//调用退出函数
break;
case WM_COMMAND:
switch(LOWORD (wParam)) {
case IDOK:
DialogBox(hInst,"IDD_DIALOG3",hWnd,DlgProc);
break;
case IDCANCEL:
PostQuitMessage( 0 );//调用退出函数
break;
case bbb:
hwndn = CreateDialog(hInst,IDD_DIALOG1,0,(DLGPROC)DlgProc);
ShowWindow( hwndn, 1);
break;
}
}
//调用缺省消息处理过程,
return DefWindowProc(hWnd, message, wParam, lParam);}
#include "resource.h"static TCHAR szAppName[] = TEXT("TEST");
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdline,int iCmdShow)
{
HWND hwnd;
MSG msg ;
WNDCLASS wndclass ;
int message;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WinProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = DLGWINDOWEXTRA ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (hInstance,LPSTR(ID_NOTIFYICON)) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE+1) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd=CreateDialog(hInstance,szAppName,NULL,NULL) ; ShowWindow (hwnd, iCmdShow);//显示窗口
UpdateWindow (hwnd);//刷新窗口
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}