 |
操作系统: win98
编程工具: vc6
问题: 能通过编译,但dialogbox调用失败。
源码如下:
#include "stdafx.h"
#include "windows.h"
#include "resource.h"
LRESULT CALLBACK WinFunc(HWND,UINT,WPARAM,LPARAM);
CALLBACK DBFunc(HWND,UINT,WPARAM,LPARAM);
char *szWinName="study";
HINSTANCE hInst;
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASSEX wcl;
wcl.cbClsExtra=0;
wcl.cbSize=sizeof(WNDCLASSEX);
wcl.cbWndExtra=0;
wcl.hbrBackground=(HBRUSH) GetStockObject(GRAY_BRUSH);
wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO);
wcl.hInstance=hInstance;
wcl.lpfnWndProc=WinFunc;
wcl.lpszClassName=szWinName;
//wcl.lpszMenuName="IDR_M";
wcl.lpszMenuName = MAKEINTRESOURCE(IDR_M);
wcl.style=0;
if(!RegisterClassEx(&wcl)) return 0;
hwnd=CreateWindow(
szWinName,
"学习菜单",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
HWND_DESKTOP,
//IDR_M,
NULL,
hInstance,
NULL);
hInst=hInstance;
HACCEL hacc=LoadAccelerators(hInstance,"IDR_QKEY");
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
if(!TranslateAccelerator(hwnd,hacc,&msg)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
LRESULT CALLBACK WinFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message){
case WM_COMMAND:
switch(LOWORD(wParam)){
case IDM_NEW:
int i;
i=DialogBox(hInst,"IDD_DB",hwnd,(DLGPROC)DBFunc);
if(i==-1) MessageBox(hwnd,"失败","!",MB_OK);
break;
case IDM_SAVE:
MessageBox(hwnd,"保存文件"," ",MB_OK);break;
case IDM_EXIT:
PostQuitMessage(0);break;
case IDM_COPY:
MessageBox(hwnd,"复制"," ",MB_OK);break;
case IDM_CUT:
MessageBox(hwnd,"剪切"," ",MB_OK);break;
case IDM_PASTE:
MessageBox(hwnd,"粘贴"," ",MB_OK);break;
case IDM_ABOUT:
MessageBox(hwnd,"永康工作室"," ",MB_OK);break;
break;
} break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
BOOL CALLBACK DBFunc(HWND hdwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message){
case WM_COMMAND:
switch(LOWORD(wParam)){
case IDOK:
EndDialog(hdwnd,0);
return 1;
}
}
return 0;
}
调试信息如下:
Loaded 'C:\WINDOWS\SYSTEM\ADVAPI32.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\GDI32.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\KERNEL32.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\USER32.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\IMM32.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\INDICDLL.DLL', no matching symbolic information found.
The thread 0xFFE724AB has exited with code 0 (0x0).
The program 'G:\thing\Debug\thing.exe' has exited with code 0 (0x0).
水平: 刚入门(马)
|
| |
|
 |
将:
i=DialogBox(hInst,"IDD_DB",hwnd,(DLGPROC)DBFunc);
修改为:
i=DialogBox(hInst,MAKEINTRESOURCE(IDD_DB),hwnd,(DLGPROC)DBFunc);
主持人注:按照VC++默认的处理方法,它会给IDD_DB指定一个数字,这样IDD_DB就是数字,而不是字符串,你可以使用MAKEINTRESOURCE(IDR_MENU1))将数字转换为字符串。
此问题由丛栋回答。
附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, 窗体与菜单, form, window, tform。
|
| |
|
| |
|
| |
|
|