【转】第一个MiniGUI程序:模仿QQ界面
最近几天在学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,
,,,,
"This is a dialog!",
,,
,NULL,
}; static CTRLDATA CtrlInitProgress[] =
{
{
CTRL_STATIC,
WS_VISIBLE | SS_SIMPLE,
,,,,
IDC_TEXT4,
"欢迎到我的BLOG做客:", },
{
CTRL_STATIC,
WS_VISIBLE | SS_SIMPLE,
,,,,
IDC_TEXT4,
"HTTP://HI.BAIDU.COM/CHENZHUOYOU", },
{
CTRL_BUTTON,
WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON,
,,,,
IDOK,
"关闭", }
}; static int InitDialogBoxProc(HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
switch(message){
case MSG_INITDIALOG:
return ;
case MSG_COMMAND:
switch(wParam){
case IDOK:
EndDialog(hDlg, wParam);
break;
}
return ;
case MSG_CLOSE:
EndDialog(hDlg, wParam);
return ;
}
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( , , , );
#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 = ;
CreateInfo.hCursor = GetSystemCursor();
CreateInfo.hIcon = ;
CreateInfo.MainWindowProc = LoginWinProc;
CreateInfo.lx = ;
CreateInfo.ty = ;
CreateInfo.rx = ;
CreateInfo.by = ;
CreateInfo.iBkColor = COLOR_lightwhite;
CreateInfo.dwAddData = p;
CreateInfo.hHosting = HWND_DESKTOP; hMainWnd = CreateMainWindow(&CreateInfo);
if(hMainWnd==HWND_INVALID)
return -;
ShowWindow(hMainWnd, SW_SHOWNORMAL);
while(GetMessage(&Msg, hMainWnd)){
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
MainWindowThreadCleanup(hMainWnd);
printf("The MainWin has been close!\n");
return ;
} 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,,,,hWnd,);
CreateWindow(CTRL_STATIC,
"用户名:",
WS_CHILD | WS_VISIBLE,
IDC_TEXT1,
50,,,,hWnd,);
CreateWindow(CTRL_EDIT,
"User Name",
WS_CHILD | WS_BORDER | WS_VISIBLE,
IDC_EDIT0,
130,,,,hWnd,);
CreateWindow(CTRL_STATIC,
"密码:",
WS_CHILD | WS_VISIBLE,
IDC_TEXT2,
50,,,,hWnd,);
CreateWindow(CTRL_EDIT,
"Password",
WS_CHILD | WS_BORDER | WS_VISIBLE | ES_PASSWORD,
IDC_EDIT1,
130,,,,hWnd,);
CreateWindow(CTRL_BUTTON,
"登陆",
WS_CHILD | BS_DEFPUSHBUTTON | WS_VISIBLE,
IDC_BUTTON0,
100,,,,hWnd,);
CreateWindow(CTRL_BUTTON,
"保存密码",
WS_CHILD | BS_AUTOCHECKBOX | WS_VISIBLE,
IDC_CHECKBOX0,
50,,,,hWnd,);
CreateWindow(CTRL_BUTTON,
"隐身登陆",
WS_CHILD | BS_AUTOCHECKBOX | WS_VISIBLE,
IDC_CHECKBOX1,
180,,,,hWnd,);
printf("The MainWin has been opened!\n");
return ;
case MSG_COMMAND:{
int id = LOWORD(wParam);
int code = HIWORD(wParam);
switch(id){
case IDC_BUTTON0:
if(code == BN_CLICKED){
SendMessage(hWnd, MSG_CLOSE, , );
QQWin();
}
}
return ;
}
case MSG_DESTROY:
DestroyAllControls(hWnd);
return ;
case MSG_CLOSE:
DestroyMainWindow(hWnd);
PostQuitMessage(hWnd);
return ;
}
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 = ;
CreateInfo.hCursor = GetSystemCursor();
CreateInfo.hIcon = ;
CreateInfo.MainWindowProc = QQWinProc;
CreateInfo.lx = ;
CreateInfo.ty = ;
CreateInfo.rx = ;
CreateInfo.by = ;
CreateInfo.iBkColor = COLOR_lightwhite;
CreateInfo.dwAddData = ;
CreateInfo.hHosting = HWND_DESKTOP; hQQWnd = CreateMainWindow(&CreateInfo);
if(hQQWnd==HWND_INVALID)
return -;
ShowWindow(hQQWnd, SW_SHOWNORMAL);
while(GetMessage(&Msg, hQQWnd)){
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
MainWindowThreadCleanup(hQQWnd);
printf("The QQWin has been closed!\n");
return ;
} 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,,,,hWnd,);
LISTBOXITEMINFO lbii;
lbii.hIcon = GetSmallSystemIcon();
lbii.cmFlag = CMFLAG_BLANK;
lbii.string = "YoYo Chan";
SendMessage(hListBox, LB_ADDSTRING, , (LPARAM)&lbii);
CreateWindow(CTRL_BUTTON,
"点击我",
WS_CHILD | WS_VISIBLE,
IDC_BUTTON3,
10,,,,hWnd,);
printf("The QQWin has been opened!\n");
return ;
} 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[];
index = SendMessage(hListBox, LB_GETCURSEL, , );
SendMessage(hListBox, LB_GETTEXT, index, (LPARAM)buffer);
MessageWin(hWnd, (char *)buffer);
}
case IDC_BUTTON3:
if(code == BN_CLICKED)
InitDialogBox(hWnd);
}
return ;
}
case MSG_DESTROY:
DestroyAllControls(hWnd);
return ;
case MSG_CLOSE:
DestroyMainWindow(hWnd);
PostQuitMessage(hWnd);
return ;
}
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 = ;
CreateInfo.hCursor = GetSystemCursor();
CreateInfo.hIcon = ;
CreateInfo.MainWindowProc = MessageWinProc;
CreateInfo.lx = ;
CreateInfo.ty = ;
CreateInfo.rx = ;
CreateInfo.by = ;
CreateInfo.iBkColor = COLOR_lightwhite;
CreateInfo.dwAddData = ;
CreateInfo.hHosting = hWnd; hMsgWnd = CreateMainWindow(&CreateInfo);
if(hMsgWnd==HWND_INVALID)
return -;
ShowWindow(hMsgWnd, SW_SHOWNORMAL);
return ;
} 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,,,,hWnd,);
SendMessage(GetDlgItem(hWnd, IDC_EDIT2), EM_SETREADONLY, TRUE, );
CreateWindow(CTRL_EDIT,
"",
WS_CHILD | WS_BORDER | WS_VISIBLE | WS_TABSTOP | ES_AUTOWRAP,
IDC_EDIT3,
10,,,,hWnd,);
CreateWindow(CTRL_BUTTON,
"发送",
WS_CHILD | WS_VISIBLE,
IDC_BUTTON1,
370,,,,hWnd,); CreateWindow(CTRL_BUTTON,
"关闭",
WS_CHILD | WS_VISIBLE,
IDC_BUTTON2,
370,,,,hWnd,);
SetNotificationCallback(GetDlgItem(hWnd, IDC_BUTTON1), MessageSendProc);
printf("The MessageWin has been opened!\n");
return ;
case MSG_COMMAND:{
int id = LOWORD(wParam);
int code = HIWORD(wParam);
switch(id){
case IDC_BUTTON2:
if(code == BN_CLICKED)
SendMessage(hWnd, MSG_CLOSE, , );
}
return ;
}
case MSG_DESTROY:
DestroyAllControls(hWnd);
printf("The MessageWin has been destroyed!\n");
return ;
case MSG_CLOSE:
DestroyMainWindow(hWnd);
MainWindowCleanup(hWnd);
printf("The MessageWin has been closed!\n");
return ;
}
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[];
char *p;
p = (char *)malloc();
GetWindowText(GetDlgItem(GetParent(hWnd), IDC_EDIT2), p, );
GetWindowText(GetDlgItem(GetParent(hWnd), IDC_EDIT3), buffer, );
strcat(p, buffer);
SetWindowText(GetDlgItem(GetParent(hWnd), IDC_EDIT2), p);
free(p);
return ;
}
return ;
}
}
//=======================信息对话框代码结束====================================================================================//
效果图:


(chenzhuoyou)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。
转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201004/9078.html]
【转】第一个MiniGUI程序:模仿QQ界面的更多相关文章
- 模仿qq界面实现(WTL)
前面对于界面用哪一种我试过用duilib,但是老感觉和MFC差距有点多,终于发现WTL的库能够实现我的所有界面功能,几天的努力终于搞定界面的重写.还是见我的成果吧: 1登录界面: 2主界面: 3.主界 ...
- C#.NET学习笔记2---C#.第一个C#程序
C#.NET学习笔记2---C#.第一个C#程序 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com 6.第一个C#程序: ...
- Qt 之 模仿 QQ登陆界面——样式篇
一.简述 今天晚上花了半天时间从QQ登录界面抠了些图,顺便加了点样式基本上实现了QQ的登陆界面全部效果.虽不说100%相似,那也有99.99%相似了哈O(∩_∩)O. QQ好像从去年开始,登录界面有了 ...
- swift:用UITabBarController、UINavigationController、模态窗口简单的搭建一个QQ界面
搭建一个QQ界面其实是一个很简单的实现,需要几种切换视图的控制器组合一起使用,即导航控制器.标签栏控制器.模态窗口.其中,将标签栏控制器设置为window的rootViewController,因为Q ...
- [转]Android:布局实例之模仿QQ登录界面
Android:布局实例之模仿QQ登录界面 预览图: 准备: 1.找到模仿对象 QQ登陆界面UI下载>>>>> 2.导入工程 3.查看布局结构和使用控件 其对应效果图分布 ...
- HDFS设计思路,HDFS使用,查看集群状态,HDFS,HDFS上传文件,HDFS下载文件,yarn web管理界面信息查看,运行一个mapreduce程序,mapreduce的demo
26 集群使用初步 HDFS的设计思路 l 设计思想 分而治之:将大文件.大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析: l 在大数据系统中作用: 为各类分布式 ...
- Android 模仿QQ风格的 UI
本文内容 环境 演示模仿QQ风格的界面 本文主要演示的是 UI,如何模仿 QQ 风格的界面.虽然这个 UI 跟现在的QQ空间有点差别,但是也能学到很多东西. 下载 Demo 环境 Windows 7 ...
- Qt 模仿QQ截图 动态吸附直线
最近在学Qt.学东西怎么能不动手. 就写了些小程序.看QQ截图能够动态吸附直线的功能挺有意思,所以就模仿了一个. 先上效果图 界面很简单..呵呵 移动鼠标,会把鼠标所在最小矩形选中.把没有选中的地方给 ...
- 循序渐进实现仿QQ界面(一):园角矩形与双缓冲贴图窗口
印象里仿QQ界面的程序应该有很多,搜了一下,虽然出来一大堆,排除了重复的,却只有两三个,没我想象的好.经常看到CSDN上有人问,QQ这个功能怎么实现,那个界面怎么实现,归纳了一下,决定写这么一个仿QQ ...
随机推荐
- 【转】YUV格式&像素
一幅彩色图像的基本要素是什么? 说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少.一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147 ...
- 用户控件(.ascx)与<ul><li>以及<a>布局之小结
用户控件(.ascx)与<ul><li>以及<a>布局 小结 一.用户控件(.ascx) 1.aspx是浏览器直接访问的页面,而ascx是用户控件,一般是用来重用. ...
- oracle SQL语句练习MERGE、模糊查询、排序、
Oracle支持的SQL指令可分为数据操作语言语句.数据定义语言语句.事务控制语句.会话控制语句等几种类型:1.数据操作语言语句数据操作语言语句(Data manipulation language, ...
- asp.net操作xml(增删查改)
asp.net操作xml 1.xml文档Products.xml <?xml version="1.0" encoding="utf-8"?> &l ...
- sql两个表联合更新
update TableA set id=TableB.id from TableA,TableB where TableA.name=TableB.name
- 关于java WEB下载
web.xml配置mapping 页面直接配置路径就可下载 <mime-mapping> <extension>doc</extension> <mim ...
- silverlight+wcf 获得web参数
可以由wcf直接得到参数 ,具体代码如下: using System;using System.Linq;using System.Runtime.Serialization;using System ...
- PDO事务管理DEMO
try { $dsn = "mysql:host=127.0.0.1;port=3306;dbname=dab"; $pdo = new PDO($dsn, 'root', '') ...
- 一个cocos2d-x的项目
前几天完成了一个cocos2d-x的项目,放在git上: https://github.com/gittor/Jigsaw 采用cocos的版本是3.7.1. 项目是一个拼图的游戏,市面上的拼图类游戏 ...
- 《APUE》读书笔记第十一章-线程
本章主要介绍了线程,了解如何使用多线程在单进程环境中来执行多任务.由于多个线程共享其进程空间,所以必须采用同步的机制来保护数据的一致性. 一.线程的概念 典型的Unix系统都可以看成只有一个控制线程, ...