makefriend8
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2014-06-27
  • 粉丝0
  • 关注0
  • 积分84分
  • 威望111点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:1712回复:3

不用MFC,怎么使用对话框啊?

楼主#
更多 发布于:2005-02-28 13:28
我的代码如下,但是一旦把2个按扭去掉就没办法关掉了。
现在也有问题。好象关不干净。程序结束了,进程里面还有。
#include <windows.h>
#include\"resource.h\"
INT_PTR CALLBACK
DlgProc1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
int PASCAL WinMain (HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR     lpszCmdParam,
                    int       nCmdShow)
{
 MSG       msg;
 DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL,(DLGPROC)DlgProc1);
 while (GetMessage (&msg, NULL, 0,0))
      {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
      }
    return (0);
}
INT_PTR CALLBACK
DlgProc1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    LRESULT result=0;
    switch(message)
    {
case WM_INITDIALOG:
         break;
case WM_CLOSE:
EndDialog(hDlg, result);
        break;
case WM_DESTROY:
EndDialog(hDlg, result);
        break;
case WM_QUIT:
EndDialog(hDlg, result);
break;
case WM_COMMAND:
switch(LOWORD (wParam)){
case IDOK:
EndDialog(hDlg, IDOK);
break;}
break;
case WM_SYSCOMMAND:
switch(wParam){
case SC_CLOSE:
EndDialog(hDlg, result);
break;}
break;
  default:
   return DefWindowProc(hDlg,message,wParam,lParam );

    }
    return FALSE;
}



rc文件也贴下吧!虽然没啥用。
IDD_DIALOG1 DIALOG DISCARDABLE  0, 0, 187, 100
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
    WS_CAPTION | WS_SYSMENU
CAPTION \"死了\"
FONT 10, \"System\"
BEGIN
    DEFPUSHBUTTON   \"OK\",IDOK,130,7,50,14
    PUSHBUTTON      \"Cancel\",IDCANCEL,130,24,50,14
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
    IDD_DIALOG1, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 180
        TOPMARGIN, 7
        BOTTOMMARGIN, 93
    END
END
#endif    // APSTUDIO_INVOKED

#endif    // Chinese (P.R.C.) resources
liuhaochuan
驱动牛犊
驱动牛犊
  • 注册日期2003-12-22
  • 最后登录2013-12-04
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-06 22:21
应该在dialog里处理消息而不是在winmain里处理。
seahawk
驱动牛犊
驱动牛犊
  • 注册日期2005-02-13
  • 最后登录2006-03-08
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-07 00:17
我的代码如下,但是一旦把2个按扭去掉就没办法关掉了。
现在也有问题。好象关不干净。程序结束了,进程里面还有。
#include <windows.h>
#include\"resource.h\"
INT_PTR CALLBACK
DlgProc1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
int PASCAL WinMain (HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR     lpszCmdParam,
                    int       nCmdShow)
{
 MSG       msg;
 DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL,(DLGPROC)DlgProc1);
 while (GetMessage (&msg, NULL, 0,0))
      {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
      }
    return (0);
}
INT_PTR CALLBACK
DlgProc1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    LRESULT result=0;
    switch(message)
    {
case WM_INITDIALOG:
         break;
case WM_CLOSE:
EndDialog(hDlg, result);
        break;
case WM_DESTROY:
EndDialog(hDlg, result);
        break;
case WM_QUIT:
EndDialog(hDlg, result);
break;
case WM_COMMAND:
switch(LOWORD (wParam)){
case IDOK:
EndDialog(hDlg, IDOK);
break;}
break;
case WM_SYSCOMMAND:
switch(wParam){
case SC_CLOSE:
EndDialog(hDlg, result);
break;}
break;
  default:
   return DefWindowProc(hDlg,message,wParam,lParam );

    }
    return FALSE;
}



rc文件也贴下吧!虽然没啥用。
IDD_DIALOG1 DIALOG DISCARDABLE  0, 0, 187, 100
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
    WS_CAPTION | WS_SYSMENU
CAPTION \"死了\"
FONT 10, \"System\"
BEGIN
    DEFPUSHBUTTON   \"OK\",IDOK,130,7,50,14
    PUSHBUTTON      \"Cancel\",IDCANCEL,130,24,50,14
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
    IDD_DIALOG1, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 180
        TOPMARGIN, 7
        BOTTOMMARGIN, 93
    END
END
#endif    // APSTUDIO_INVOKED

#endif    // Chinese (P.R.C.) resources


同志,你的问题是混淆了对话框的消息处理和窗口的消息处理。
其实你在按下对话框按钮的时候,对话框已经结束了。但是你的主程序还在不停地取消息和分发消息;都没给人机会退出,你却在对话框的消息过程里大做文章:)
所以你只要在主消息泵里增加一个条件,这个条件发生时PostQuitMessage(0);这样下一个GetMessage才会返回假,你的循环才有可能结束呀
傍海渔村酣睡足 斜阳一脉洒千山 鲲鹏不待风潮起 万古江山多寂寥
seahawk
驱动牛犊
驱动牛犊
  • 注册日期2005-02-13
  • 最后登录2006-03-08
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-07 00:22
对了,你把小蚂蚁的例子下来看看
人家大公无私把代码公开了,我们不要辜负了他的一番美意

参见:
续:如何使模板资源创建的对话框作为主窗口显示?我已经解决这个问题,现提供代码给象我一样的菜鸟
傍海渔村酣睡足 斜阳一脉洒千山 鲲鹏不待风潮起 万古江山多寂寥
游客

返回顶部