加入体验视屏美女

3/20/2009

minigui做的仿qq程序,修改了第二个窗口死锁状况


                     
//miniQQ程序

                     
//minigui版本号1.6.10

                     
//qvfb版本1.1

      
//作者:qqq


#include<stdio.h>

#include<minigui/common.h>

#include<minigui/minigui.h>

#include<minigui/gdi.h>

#include<minigui/window.h>

#include<minigui/control.h>


#define IDC_BUTTON_0 100

#define IDC_BUTTON_1 101

#define IDC_BUTTON_2 102

#define IDC_BUTTON_3 103


#define IDC_CHECKBOX_0 200

#define IDC_CHECKBOX_1 201

#define IDC_CHECKBOX_2 202


#define IDC_TEXT_0 300

#define IDC_TEXT_1 301

#define IDC_TEXT_2 302

#define IDC_TEXT_3 303

#define IDC_TEXT_4 304


#define IDC_EDIT_0 400

#define IDC_EDIT_1 401

#define IDC_EDIT_2 402

#define IDC_EDIT_3 403

#define IDC_EDIT_4 404


#define IDC_LISTBOX_0 500




//-------------------对话框代码

static DLGTEMPLATE DlgInitProgress = {

WS_BORDER | WS_CAPTION,

WS_EX_NONE,

0,0,320,240,

"个人信息",

0,0,

3,NULL,

0

};




static CTRLDATA CtrlInitProgress[] =

{

{

     
CTRL_STATIC,

     
WS_VISIBLE | SS_SIMPLE,

     
50,50,250,30,

     
IDC_TEXT_4,

     
"欢迎到我的BLOG做客:",

     
0

},

{

     
CTRL_STATIC,

     
WS_VISIBLE | SS_SIMPLE,

     
50,80,250,30,

     
IDC_TEXT_4,

     
"http://blog.sina.com.cn/u/1180215917",


     
0

},

{

     
CTRL_BUTTON,

     
WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON,

     
120,150,80,30,

     
IDOK,

     
"关闭",

     
0

}

};




static int InitDialogBoxProc(HWND hDlg, int message, WPARAM wParam,
LPARAM lParam)

{

switch(message){

case MSG_INITDIALOG:

     
return 1;

case MSG_COMMAND:

     
switch(wParam){

     
case IDOK:

      
EndDialog(hDlg, wParam);

      
break;

     
}

     
return 0;

case MSG_CLOSE:

     
EndDialog(hDlg, wParam);

     
return 0;

}

return DefaultDialogProc(hDlg, message, wParam, lParam);

}


static int OpenDialogBox(HWND hWnd)

{

DlgInitProgress.controls = CtrlInitProgress;

DialogBoxIndirectParam(&DlgInitProgress, hWnd,
InitDialogBoxProc, 0L);

}


//-------------------------交谈信息对话框

static int MessageSendProc(HWND hWnd, int id, int nc, DWORD
add_data)

{

switch(nc){

case BN_CLICKED:{

     
char buffer[256];

     
char *p;

     
p = (char *)malloc(1024);

     
GetWindowText(GetDlgItem(GetParent(hWnd), IDC_EDIT_2), p,
1024);

     
GetWindowText(GetDlgItem(GetParent(hWnd), IDC_EDIT_3), buffer,
255);

     
strcat(p, buffer);

     
SetWindowText(GetDlgItem(GetParent(hWnd), IDC_EDIT_2), p);

     
free(p);

     
return 0;

}

return 0;

}

}


static int MessageWinProc(HWND hWnd, int message, WPARAM wParam,
LPARAM lParam)

{

static int MessageSendProc();

switch(message){

case MSG_CREATE:

     
CreateWindow(CTRL_MLEDIT,

       
"",

       
WS_CHILD | WS_BORDER | WS_VISIBLE | ES_AUTOWRAP | WS_VSCROLL,

       
IDC_EDIT_2,

       
10,10,350,200,hWnd,0);

     
SendMessage(GetDlgItem(hWnd, IDC_EDIT_2), EM_SETREADONLY, TRUE,
0);



     
CreateWindow(CTRL_EDIT,

       
"",

       
WS_CHILD | WS_BORDER | WS_VISIBLE | WS_TABSTOP | ES_AUTOWRAP,

       
IDC_EDIT_3,

       
10,220,350,100,hWnd,0);



     
CreateWindow(CTRL_BUTTON,

       
"发送",

       
WS_CHILD | WS_VISIBLE,

       
IDC_BUTTON_1,

       
370,220,70,45,hWnd,0);

 

     
CreateWindow(CTRL_BUTTON,

       
"关闭",

       
WS_CHILD | WS_VISIBLE,

       
IDC_BUTTON_2,

       
370,275,70,45,hWnd,0);



     
SetNotificationCallback(GetDlgItem(hWnd, IDC_BUTTON_1),
MessageSendProc); 

     
printf("The MessageWin has been opened!\n");

     
return 0;


case MSG_COMMAND:{

     
int id = LOWORD(wParam);

     
int code = HIWORD(wParam);

     
switch(id){

     
case IDC_BUTTON_2:

      
if(code == BN_CLICKED)

       
SendMessage(hWnd, MSG_CLOSE, 0, 0);

     
}

     
return 0;

}


case MSG_DESTROY:

     
DestroyAllControls(hWnd);

     
printf("The MessageWin has been destroyed!\n");

     
return 0;


case MSG_CLOSE:

     
DestroyMainWindow(hWnd);

     
MainWindowCleanup(hWnd);

     
printf("The MessageWin has been closed!\n");

     
return 0;

}

return DefaultMainWinProc(hWnd, message, wParam, lParam);

}


int CreateMessageWin(HWND hWnd, char* friendName){

 HWND hMsgWnd;

 MAINWINCREATE CreateInfo;


 CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER |
WS_CAPTION;

 CreateInfo.dwExStyle = WS_EX_NONE;

 CreateInfo.spCaption = friendName;

 CreateInfo.hMenu = 0;

 CreateInfo.hCursor = GetSystemCursor(0);

 CreateInfo.hIcon = 0;

 CreateInfo.MainWindowProc = MessageWinProc;

 CreateInfo.lx = 0;

 CreateInfo.ty = 0;

 CreateInfo.rx = 450;

 CreateInfo.by = 350;

 CreateInfo.iBkColor = COLOR_lightwhite;

 CreateInfo.dwAddData = 0;

 CreateInfo.hHosting = hWnd;


 hMsgWnd =
CreateMainWindow(&CreateInfo);

 if(hMsgWnd==HWND_INVALID)

    return
-1;

 ShowWindow(hMsgWnd, SW_SHOWNORMAL);

 return 0;

}




//------------------qq面板代码

static int QQWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM
lParam)

{

static int MessageWin();

static HWND hListBox;


switch(message){

case MSG_CREATE:{

     
HWND hListBox;

     
hListBox = CreateWindow(CTRL_LISTBOX,

        
"FriendsList",

        
WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | LBS_SORT |
LBS_NOTIFY | LBS_USEICON,

        
IDC_LISTBOX_0,

        
10,10,160,350,hWnd,0);



     
LISTBOXITEMINFO lbii;

     
lbii.hIcon = GetSmallSystemIcon(4);

     
lbii.cmFlag = CMFLAG_BLANK;

     
lbii.string = "qqq";

     
SendMessage(hListBox, LB_ADDSTRING, 0,
(LPARAM)&lbii);

  printf("create
hlistbox\n");

     
CreateWindow(CTRL_BUTTON,

       
"个人设置",

       
WS_CHILD | WS_VISIBLE,

       
IDC_BUTTON_3,

       
10,370,160,30,hWnd,0);



     
printf("The QQWin has been opened!\n");



     
return 0;

}


case MSG_COMMAND:{

     
int id = LOWORD(wParam);

     
int code = HIWORD(wParam);

     
switch(id){

     
case IDC_LISTBOX_0:

      
if(code == LBN_DBLCLK){

       
hListBox = GetDlgItem(hWnd, IDC_LISTBOX_0);

       
int index;

       
char buffer[20];

       
index = SendMessage(hListBox, LB_GETCURSEL, 0, 0);

       
SendMessage(hListBox, LB_GETTEXT, index, (LPARAM)buffer);

  printf("go to
message\n");

       
CreateMessageWin(hWnd, (char *)buffer);

      
}

     
case IDC_BUTTON_3:

      
if(code == BN_CLICKED)

       
OpenDialogBox(hWnd);

  printf("2222\n");

     
}

     
return 0;

}


case MSG_DESTROY:

  printf("destory\n");

     
DestroyAllControls(hWnd);

     
return 0;


case MSG_CLOSE:

 

     
DestroyMainWindow(hWnd);

     
PostQuitMessage(hWnd);

   printf("close\n");

     
return 0;

}

return DefaultMainWinProc(hWnd, message, wParam, lParam);

}


int CreateQQWin(){

 MSG Msg;

 HWND hQQWnd;

 MAINWINCREATE CreateInfo;


 CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER |
WS_CAPTION;

 CreateInfo.dwExStyle = WS_EX_NONE;

 CreateInfo.spCaption = "MiniQQ -********";

 CreateInfo.hMenu = 0;

 CreateInfo.hCursor = GetSystemCursor(0);

 CreateInfo.hIcon = 0;

 CreateInfo.MainWindowProc = QQWinProc;

 CreateInfo.lx = 0;

 CreateInfo.ty = 0;

 CreateInfo.rx = 180;

 CreateInfo.by = 450;

 CreateInfo.iBkColor = COLOR_lightwhite;

 CreateInfo.dwAddData = 0;

 CreateInfo.hHosting = HWND_DESKTOP;


 hQQWnd =
CreateMainWindow(&CreateInfo);

 if(hQQWnd==HWND_INVALID)

  return -1;

 ShowWindow(hQQWnd, SW_SHOWNORMAL);

 printf(GetMessage(&Msg,
hQQWnd));

 //printf("\n");

 while(GetMessage(&Msg,
hQQWnd)){

  TranslateMessage(&Msg);


  DispatchMessage(&Msg);


  printf("translate
message\n");

 }

 MainWindowThreadCleanup(hQQWnd);

 printf("The QQWin has been closed!\n");

 return 0;

}


//-------------------登陆对话框代码

int LoginWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM
lParam){

 char *str1 = (char
*)GetWindowAdditionalData(hWnd);


switch(message){

case MSG_CREATE:

     
CreateWindow(CTRL_STATIC,

       
str1,

       
WS_CHILD | WS_VISIBLE,

       
IDC_TEXT_0,

       
10,10,220,20,hWnd,0);



     
CreateWindow(CTRL_STATIC,

       
"QQ账号:",

       
WS_CHILD | WS_VISIBLE,

       
IDC_TEXT_1,

       
50,50,80,20,hWnd,0);



     
CreateWindow(CTRL_EDIT,

       
"",

       
WS_CHILD | WS_BORDER | WS_VISIBLE,

       
IDC_EDIT_0,

       
130,50,100,20,hWnd,0);



     
CreateWindow(CTRL_STATIC,

       
"QQ密码:",

       
WS_CHILD | WS_VISIBLE,

       
IDC_TEXT_2,

       
50,80,80,20,hWnd,0);



     
CreateWindow(CTRL_EDIT,

       
"",

       
WS_CHILD | WS_BORDER | WS_VISIBLE | ES_PASSWORD,

       
IDC_EDIT_1,

       
130,80,100,20,hWnd,0);



     
CreateWindow(CTRL_BUTTON,

       
"登陆",

       
WS_CHILD | BS_DEFPUSHBUTTON | WS_VISIBLE,

       
IDC_BUTTON_0,

       
100,160,80,30,hWnd,0);



     
CreateWindow(CTRL_BUTTON,

       
"自动登录",

       
WS_CHILD | BS_AUTOCHECKBOX | WS_VISIBLE,

       
IDC_CHECKBOX_0,

       
50,120,100,30,hWnd,0);



     
CreateWindow(CTRL_BUTTON,

       
"隐身",

       
WS_CHILD | BS_AUTOCHECKBOX | WS_VISIBLE,

       
IDC_CHECKBOX_1,

       
180,120,100,30,hWnd,0);



     
printf("The MainWin has been opened!\n");



     
return 0;


case MSG_COMMAND:{

     
int id = LOWORD(wParam);

     
int code = HIWORD(wParam);

     
switch(id){

     
case IDC_BUTTON_0:

      
if(code == BN_CLICKED){

       
SendMessage(hWnd, MSG_CLOSE, 0, 0);

       
CreateQQWin();

      
}

     
}

     
return 0;

}

case MSG_DESTROY:

     
DestroyAllControls(hWnd);

     
return 0;


case MSG_CLOSE:

     
DestroyMainWindow(hWnd);

     
PostQuitMessage(hWnd);

     
return 0;

}

return DefaultMainWinProc(hWnd, message, wParam, lParam);

}


int CreateLogin(){

 MSG Msg;

 HWND hMainWnd;

 MAINWINCREATE CreateInfo;


 char *p="这是个QQ仿真界面";

 

 CreateInfo.dwStyle=WS_VISIBLE | WS_BORDER |
WS_CAPTION;

 CreateInfo.dwExStyle=WS_EX_NONE;

 CreateInfo.spCaption="MiniQQ";

 CreateInfo.hMenu=0;

 CreateInfo.hCursor=GetSystemCursor(0);

 CreateInfo.hIcon=0;

 CreateInfo.MainWindowProc=LoginWinProc;

 CreateInfo.lx=0;

 CreateInfo.ty=0;

 CreateInfo.rx=320;

 CreateInfo.by=240;

 CreateInfo.iBkColor = COLOR_lightwhite;

 CreateInfo.dwAddData = p;

 CreateInfo.hHosting = HWND_DESKTOP;



 hMainWnd=CreateMainWindow(&CreateInfo);


 if(hMainWnd==HWND_INVALID)

  return -1;

 ShowWindow(hMainWnd,SW_SHOWNORMAL);

 while(GetMessage(&Msg,hMainWnd)){


  TranslateMessage(&Msg);


  DispatchMessage(&Msg);


 }

 MainWindowThreadCleanup(hMainWnd);

 printf("The MainWin has been close");

 return 0;

}


//---------------主函数

int MiniGUIMain(int argc,const char *argv[]){


#ifdef _MGRM_PROCESSES

   
JoinLayer(NAME_DEF_LAYER , "QQWindow" , 0 , 0);

#endif

 CreateLogin();

}

没有评论:

发表评论