最近几天在学MiniGui,最好的学习方法就是实践,先写个练练笔。
其实只是一个界面,不知道什么时候才能真正写个完整的程序。
初次写GUI程序,感觉写得不好,还请高手来指教。
//======================================================================// // MiniQQ GUI ver 1.0 // // 作者:YoYo Chan // // Email: czy1000@126.com // // Blog: http://hi.baidu.com/chenzhuoyou // // MiniGUI版本: 1.3.3 // //==================================================================// #include <stdio.h> #include <minigui/common.h> #include <minigui/minigui.h> #include <minigui/gdi.h> #include <minigui/window.h> #include <minigui/control.h> #ifndef _LITE_VERSION #include <minigui/dti.c> #endif #define IDC_BUTTON0 100 #define IDC_BUTTON1 100+1 #define IDC_BUTTON2 100+2 #define IDC_BUTTON3 100+3 #define IDC_CHECKBOX0 110 #define IDC_CHECKBOX1 110+1 #define IDC_CHECKBOX2 110+2 #define IDC_TEXT0 120 #define IDC_TEXT1 120+1 #define IDC_TEXT2 120+2 #define IDC_TEXT3 120+3 #define IDC_TEXT4 120+4 #define IDC_EDIT0 130 #define IDC_EDIT1 130+1 #define IDC_EDIT2 130+2 #define IDC_EDIT3 130+3 #define IDC_EDIT4 130+4 #define IDC_LISTBOX0 140 //==========================Dialog代码开始==============================================================================// static DLGTEMPLATE DlgInitProgress = { WS_BORDER | WS_CAPTION, WS_EX_NONE, 0,0,320,240, "This is a dialog!", 0,0, 3,NULL, 0 }; static CTRLDATA CtrlInitProgress[] = { { CTRL_STATIC, WS_VISIBLE | SS_SIMPLE, 50,50,250,30, IDC_TEXT4, "欢迎到我的BLOG做客:", 0 }, { CTRL_STATIC, WS_VISIBLE | SS_SIMPLE, 50,80,250,30, IDC_TEXT4, "HTTP://HI.BAIDU.COM/CHENZHUOYOU", 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 InitDialogBox(HWND hWnd) { DlgInitProgress.controls = CtrlInitProgress; DialogBoxIndirectParam(&DlgInitProgress, hWnd, InitDialogBoxProc, 0L); } //=======================Dialog代码结束=======================================================================// //========================Login代码开始=======================================================================// int MiniGUIMain(int argc, const char* argv[]) { static int LoginWinProc(); MSG Msg; HWND hMainWnd; MAINWINCREATE CreateInfo;
#ifdef _LITE_VERSION SetDesktopRect( 0, 0, 800, 600); #endif char *p = "这是YoYo的第一个MiniGUI程序!"; CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION; CreateInfo.dwExStyle = WS_EX_NONE; CreateInfo.spCaption = "MiniQQ ver0.1 Author: YoYo Chan"; 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!\n"); return 0; } static int LoginWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) { static int QQWin(); char *str1 = (char *)GetWindowAdditionalData(hWnd); switch(message){ case MSG_CREATE: CreateWindow(CTRL_STATIC, str1, WS_CHILD | WS_VISIBLE, IDC_TEXT0, 10,10,220,20,hWnd,0);
CreateWindow(CTRL_STATIC, "用户名:", WS_CHILD | WS_VISIBLE, IDC_TEXT1, 50,50,80,20,hWnd,0);
CreateWindow(CTRL_EDIT, "User Name", WS_CHILD | WS_BORDER | WS_VISIBLE, IDC_EDIT0, 130,50,100,20,hWnd,0);
CreateWindow(CTRL_STATIC, "密码:", WS_CHILD | WS_VISIBLE, IDC_TEXT2, 50,80,80,20,hWnd,0);
CreateWindow(CTRL_EDIT, "Password", WS_CHILD | WS_BORDER | WS_VISIBLE | ES_PASSWORD, IDC_EDIT1, 130,80,100,20,hWnd,0);
CreateWindow(CTRL_BUTTON, "登陆", WS_CHILD | BS_DEFPUSHBUTTON | WS_VISIBLE, IDC_BUTTON0, 100,160,80,30,hWnd,0);
CreateWindow(CTRL_BUTTON, "保存密码", WS_CHILD | BS_AUTOCHECKBOX | WS_VISIBLE, IDC_CHECKBOX0, 50,120,100,30,hWnd,0);
CreateWindow(CTRL_BUTTON, "隐身登陆", WS_CHILD | BS_AUTOCHECKBOX | WS_VISIBLE, IDC_CHECKBOX1, 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_BUTTON0: if(code == BN_CLICKED){ SendMessage(hWnd, MSG_CLOSE, 0, 0); QQWin(); } } return 0; } case MSG_DESTROY: DestroyAllControls(hWnd); return 0; case MSG_CLOSE: DestroyMainWindow(hWnd); PostQuitMessage(hWnd); return 0; }
return DefaultMainWinProc(hWnd, message, wParam, lParam); } //=========================Login代码结束==========================================================================================// //=========================QQ主面板代码开始=========================================================================================// static int QQWin(void) { static int QQWinProc(); MSG Msg; HWND hQQWnd; MAINWINCREATE CreateInfo; CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION; CreateInfo.dwExStyle = WS_EX_NONE; CreateInfo.spCaption = "MiniQQ ver0.1"; 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); while(GetMessage(&Msg, hQQWnd)){ TranslateMessage(&Msg); DispatchMessage(&Msg); } MainWindowThreadCleanup(hQQWnd); printf("The QQWin has been closed!\n"); return 0; } 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_LISTBOX0, 10,10,160,350,hWnd,0); LISTBOXITEMINFO lbii; lbii.hIcon = GetSmallSystemIcon(4); lbii.cmFlag = CMFLAG_BLANK; lbii.string = "YoYo Chan"; SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)&lbii); CreateWindow(CTRL_BUTTON, "点击我", WS_CHILD | WS_VISIBLE, IDC_BUTTON3, 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_LISTBOX0: if(code == LBN_DBLCLK){ hListBox = GetDlgItem(hWnd, IDC_LISTBOX0); int index; char buffer[20]; index = SendMessage(hListBox, LB_GETCURSEL, 0, 0); SendMessage(hListBox, LB_GETTEXT, index, (LPARAM)buffer); MessageWin(hWnd, (char *)buffer); } case IDC_BUTTON3: if(code == BN_CLICKED) InitDialogBox(hWnd); } return 0; } case MSG_DESTROY: DestroyAllControls(hWnd); return 0; case MSG_CLOSE: DestroyMainWindow(hWnd); PostQuitMessage(hWnd); return 0; }
return DefaultMainWinProc(hWnd, message, wParam, lParam); } //======================QQ主面板代码结束====================================================================================// //=====================消息对话框代码开始=====================================================================================// static int MessageWin(HWND hWnd, char* friendName) { static int MessageWinProc(); 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; } 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_EDIT2, 10,10,350,200,hWnd,0);
SendMessage(GetDlgItem(hWnd, IDC_EDIT2), EM_SETREADONLY, TRUE, 0);
CreateWindow(CTRL_EDIT, "", WS_CHILD | WS_BORDER | WS_VISIBLE | WS_TABSTOP | ES_AUTOWRAP, IDC_EDIT3, 10,220,350,100,hWnd,0);
CreateWindow(CTRL_BUTTON, "发送", WS_CHILD | WS_VISIBLE, IDC_BUTTON1, 370,220,70,45,hWnd,0); CreateWindow(CTRL_BUTTON, "关闭", WS_CHILD | WS_VISIBLE, IDC_BUTTON2, 370,275,70,45,hWnd,0);
SetNotificationCallback(GetDlgItem(hWnd, IDC_BUTTON1), 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_BUTTON2: 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); } 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_EDIT2), p, 1024); GetWindowText(GetDlgItem(GetParent(hWnd), IDC_EDIT3), buffer, 255); strcat(p, buffer); SetWindowText(GetDlgItem(GetParent(hWnd), IDC_EDIT2), p); free(p); return 0; } return 0; } } //=======================信息对话框代码结束====================================================================================//
效果图:
(chenzhuoyou)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。
转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201004/9078.html]
原文:http://www.cnblogs.com/cslunatic/p/5152887.html