首页
社区
课程
招聘
[求助]模态对话框不能关闭与移动
发表于: 2007-12-7 13:36 10164

[求助]模态对话框不能关闭与移动

2007-12-7 13:36
10164
// gfddsfsd.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include <string>
#define IDD_DIALOG1 102
#define IDD_DIALOG2 104
#define IDD_DIALOG3 105
#define IDI_ICON1 103
#define IDC_EDIT1 1000
#define IDC_EDIT2 1001
#define IDABOUT    3
HINSTANCE hinstance;
char* ID = "zhoulike";
char* PASS = "198929";
char idh[20];
char password[20];
int label;
bool cmp(char* ch1,char* ch2)
{
if(!strcmp(ID,ch1))
  if(!strcmp(PASS,ch2))
   return true;
return false;
}

bool CALLBACK dlgproc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
HICON hicon;
bool rt;
HWND hdlg;
switch(uMsg){
case WM_INITDIALOG:
  hicon = LoadIcon(hinstance,MAKEINTRESOURCE(IDI_ICON1));
  SendMessage(hWnd,WM_SETICON,ICON_BIG,LPARAM(hicon));
  return true;
  
   case WM_CLOSE:
        EndDialog(hWnd,NULL);
        return true;

      
case WM_COMMAND:
   switch(LOWORD(wParam)){
   case IDC_EDIT1:
    GetDlgItemText(hWnd,IDC_EDIT1,idh,20);
    return true;
         
   case IDC_EDIT2:
    GetDlgItemText(hWnd,IDC_EDIT2,password,20);
    return true;
         
   case IDOK:
    label++;
    rt = cmp(idh,password);
    if(rt){
     EndDialog(hWnd,NULL);
     DialogBoxParam(hinstance,MAKEINTRESOURCE(IDD_DIALOG2),NULL,DLGPROC(dlgproc),NULL);
     return true;
    }
    else {
     if(label >= 3){
      MessageBox(hWnd,"连续3次输入错误....","啊哦",MB_OK);
      hdlg = GetDlgItem(hWnd,IDC_EDIT1);
      EnableWindow(hdlg,false);
      hdlg = GetDlgItem(hWnd,IDC_EDIT2);
      EnableWindow(hdlg,false);
      hdlg = GetDlgItem(hWnd,IDOK);
      EnableWindow(hdlg,false);
     }
     else MessageBox(hWnd,"用户名或密码错误","WARNING",MB_OK);
     return true;
    }
    EndDialog(hWnd,NULL);
    return true;
      
   case IDCANCEL:
    EndDialog(hWnd,NULL);
    return true;
   case IDABOUT:
    DialogBoxParam(hinstance,MAKEINTRESOURCE(IDD_DIALOG3),hWnd,DLGPROC(dlgproc),NULL);
    return true;
   }
   default:break;
}
return false;
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  
hinstance = GetModuleHandle(NULL);
DialogBoxParam(hinstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DLGPROC(dlgproc),NULL);
return 0;

}
这是整个代码。红色部分就是有问题的地方了。对话框能进行其他的操作。就是不能移动,点X的时候也不会退出。好象是根本没有处理系统消息。。。。各位大侠帮帮忙啊。。。问题出在那啊。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 20
活跃值: (37)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
default:
  DefWindowProc(hWnd,uMsg,wParam,lParam);
  break;
加上这句
2007-12-7 13:57
0
雪    币: 20
活跃值: (37)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
default:
  DefWindowProc(hWnd,uMsg,wParam,lParam);
  break;
加上这句
2007-12-7 13:58
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
4
,代码写得有问题啊。我给你修改修改。
#include "windows.h"
#include <string>
#define IDD_DIALOG1 102
#define IDD_DIALOG2 104
#define IDD_DIALOG3 105
#define IDI_ICON1 103
#define IDC_EDIT1 1000
#define IDC_EDIT2 1001
#define IDABOUT    3
HINSTANCE hinstance;
char* ID = "zhoulike";
char* PASS = "198929";
char idh[20];
char password[20];
int label;
bool cmp(char* ch1,char* ch2)
{
        if(!strcmp(ID,ch1))
           if(!strcmp(PASS,ch2))
             return true;
        return false;
}

bool CALLBACK dlgproc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
        HICON hicon;
        bool rt;
        HWND hdlg;
        switch(uMsg)
        {
        case WM_INITDIALOG:
           hicon = LoadIcon(hinstance,MAKEINTRESOURCE(IDI_ICON1));
           SendMessage(hWnd,WM_SETICON,ICON_BIG,LPARAM(hicon));
           break;
  
        case WM_CLOSE:
           EndDialog(hWnd,NULL);
           break;
      
        case WM_COMMAND:
           switch(LOWORD(wParam))
           {
           case IDC_EDIT1:
                        GetDlgItemText(hWnd,IDC_EDIT1,idh,20);
                        break;
         
           case IDC_EDIT2:
                        GetDlgItemText(hWnd,IDC_EDIT2,password,20);
                        break;
         
           case IDOK:
                        label++;
                        rt = cmp(idh,password);
                        if(rt)
                        {
                                 EndDialog(hWnd,NULL);
                        }
                        else
                        {
                                 if(label >= 3)
                                 {
                                          MessageBox(hWnd,"连续3次输入错误....","啊哦",MB_OK);
                                          hdlg = GetDlgItem(hWnd,IDC_EDIT1);
                                          EnableWindow(hdlg,false);
                                          hdlg = GetDlgItem(hWnd,IDC_EDIT2);
                                          EnableWindow(hdlg,false);
                                          hdlg = GetDlgItem(hWnd,IDOK);
                                          EnableWindow(hdlg,false);
                                 }
                                 else
                                         MessageBox(hWnd,"用户名或密码错误","WARNING",MB_OK);
                                 
                                 EndDialog(hWnd,NULL);
                        }               
                        break;
      
           case IDCANCEL:
                        EndDialog(hWnd,NULL);
                        break;
           case IDabout:
                        DialogBoxParam(hinstance,MAKEINTRESOURCE(IDD_DIALOG3),hWnd,DLGPROC(dlgproc),NULL);
                        break;
           }
           default:
                        return FALSE;

        }
        return true;
}
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
        DialogBoxParam(hinstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DLGPROC(dlgproc),NULL);
        return 0;
}
2007-12-7 15:44
0
雪    币: 20
活跃值: (37)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
楼上的。
我的问题还没有解决,我按照你的给我的Code修改了管理员的权限表但是得到的结果还是一样。
2007-12-7 17:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
加上以后窗口是可以移动和关闭了。。可是也没图标了。其他一些消息好象也没处理了。。
2007-12-7 21:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这段代码跟我写的那段代码没太大区别吧。。我在每个CASE后面返回TRUE,跟你这在最后返回TRUE运行效果是一样的。窗口还是不能移动跟关闭。。
2007-12-7 21:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
你这代码也不行啊。写出来窗口也不会动。。。
2007-12-7 21:32
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
9
把你的工程打包发给我
2007-12-7 23:00
0
游客
登录 | 注册 方可回帖
返回
//