您的位置:程序门 -> vc/mfc -> 界面



用dialogbox产生的模态对话框,为什么点不了它?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


用dialogbox产生的模态对话框,为什么点不了它?[已结贴,结贴人:nafish]
发表于:2007-10-15 06:21:54 楼主
#include   <windows.h>
#include   "resource.h"
#include   "winmain.h"

hinstance   _hinst;
hwnd   _hwnd;

char   _szappname[]="winmain";
char   _sztitle[]="hello";

int   winapi   winmain(hinstance   hinstance,hinstance   hprevinstance,lpstr   lpcmdline,int   nshowcmd)
{
if(!hprevinstance)
if(!initapplication(hinstance))
return   false;
if(!initinstance(hinstance,nshowcmd))
return   false;

msg   msg;

while(getmessage(&msg,null,0,0))
{
translatemessage(&msg);
dispatchmessage(&msg);
}

return   msg.wparam;
}

bool   initapplication(hinstance   hinstance)
{
wndclass   wc;
wc.cbclsextra=0;
wc.cbwndextra=0;
wc.hbrbackground=(hbrush)getstockobject(white_brush);
wc.hcursor=loadcursor(null,makeintresource(idc_arrow));
wc.hicon=loadicon(hinstance,makeintresource(idi_winmain));
wc.hinstance=hinstance;
wc.lpfnwndproc=wndproc;
wc.lpszclassname=_szappname;
wc.lpszmenuname=makeintresource(idr_winmain);
wc.style=cs_hredraw   ¦   cs_vredraw;

return   registerclass(&wc);
}

bool   initinstance(hinstance   hinstance,int   nshowcmd)
{
_hinst=hinstance;
_hwnd=createwindow(_szappname,_sztitle,ws_overlappedwindow,cw_usedefault,null,cw_usedefault,null,null,null,hinstance,null);

if(!_hwnd)
return   false;

showwindow(_hwnd,nshowcmd);
updatewindow(_hwnd);

return   true;
}

lresult   callback   wndproc(hwnd   hwnd,uint   umsg,wparam   wparam,lparam   lparam)
{
int   wmid,wmevent;

switch(umsg)
{
case   wm_command:

wmid=loword(wparam);
wmevent=hiword(wparam);

switch(wmid)
{
case   idm_about:
dialogbox(_hinst,makeintresource(idd_about),hwnd,(dlgproc)about);
break;
case   idm_exit:
destroywindow(hwnd);
break;
default:
return   defwindowproc(hwnd,umsg,wparam,lparam);
}
break;
case   wm_destroy:
postquitmessage(0);
break;
}
return   defwindowproc(hwnd,umsg,wparam,lparam);
}

lresult   callback   about(hwnd   hdlg,uint   umsg,wparam   wparam,lparam   lparam)
{
switch(umsg)
{
case   wm_initdialog:
return   true;
break;
case   wm_command:
if(loword(wparam)==idok   ¦ ¦   loword(wparam)==idcancel)
{
enddialog(hdlg,true);
return   true;
}
break;
}
return   defwindowproc(hdlg,umsg,wparam,lparam);
}
======================================================================
我把程序的代码发上来,编译的时候没错,好心人帮忙忙看看问题出在哪里?那
个about对话框生成的不对,用鼠标点不上它,不知道是哪里问题。小弟在线等。
该帖包含附件:
发表于:2007-10-15 06:24:361楼 得分:0
附件是程序的源代码,包括资源统统打包,大牛帮忙扫一眼,哪里出的问题。
发表于:2007-10-15 07:29:252楼 得分:20
return   defwindowproc(hdlg,umsg,wparam,lparam);  
==================
改成return   false;
对话框处理程序与窗口处理程序不同,在系统内部有一个内部的对话框处理程序,如果你不处理的对话框消息你返回false则由它来处理。
发表于:2007-10-15 08:44:563楼 得分:0
enddialog  
发表于:2007-10-15 17:04:314楼 得分:0
感谢2楼,已经结贴子啦!!!


快速检索

最新资讯
热门点击