新手学习windows程序设计碰到对话框资源描述问题
最近才学windows程序设计,看的是老版本的Charles Petzold的《windows程序设计》,书看的差不多了,想练练手,准备搞个简单的计算器,那本书上也有个,但我想弄个复杂点的、不一样的。
我先写了一个框架代码,如下:
#include <windows.h>
#include "resource.h"
LRESULT CALLBACK WndProc(HWND , UINT , WPARAM , LPARAM);
BOOL CALLBACK AboutDlgProc(HWND , UINT , WPARAM , LPARAM);
char szAppName[] ="Calculator";
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,INT iCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style =CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc =WndProc;
wndclass.cbWndExtra =DLGWINDOWEXTRA;
wndclass.cbClsExtra =0;
wndclass.hInstance =hInstance;
wndclass.hIcon =LoadIcon(hInstance,szAppName);
wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground =(HBRUSH)(COLOR_BTNFACE+1);
wndclass.lpszMenuName =NULL;
wndclass.lpszClassName =szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,"Error occurs!","Error",MB_OK | MB_ICONERROR);
return 0;
}
hwnd=CreateDialog(hInstance,szAppName,0,NULL);
ShowWindow(hwnd,iCmdShow);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd ,UINT message,WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_CREATE:
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
主要问题在资源描述性文件上,以前模态对话框是直接插入资源就行了,而这里要自己写资源描述性文件,以前对话框描述文件都是写在.rc文件里的,我尝试了,用CreateDialog创建对话框load不进去,加入断点发现CreateDialog时并没有发出WM_CREATE消息,所以断定是load时出错了,但描述性文件又没有错误,再参考一下书上的代码,发现它把对话框描述放在了一个.DLG文件里,然后在.rc文件里包含那个.dlg文件,在执行就可以了。我很郁闷这到底是为什么?
请教!!
我的对话框描述性文件如下:
CALCULATOR DIALOG DISCARDABLE 0, 0, 120, 150
STYLE WS_OVERLAPPEDWINDOW | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CAPTION "Calculator"
CLASS "Calculator"
{
EDITTEXT 0,10,5,100,15
}