软件注册站
热情软件屋

 
能通过编译,但dialogbox调用失败
编号: QA004807    
建立日期: 2003年12月22日 最后修改日期: 2003年12月22日
所属类别: C/C++ - 窗体与菜单
   
    操作系统: 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

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio