最近几天在学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界面的更多相关文章

  1. 模仿qq界面实现(WTL)

    前面对于界面用哪一种我试过用duilib,但是老感觉和MFC差距有点多,终于发现WTL的库能够实现我的所有界面功能,几天的努力终于搞定界面的重写.还是见我的成果吧: 1登录界面: 2主界面: 3.主界 ...

  2. C#.NET学习笔记2---C#.第一个C#程序

    C#.NET学习笔记2---C#.第一个C#程序 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com 6.第一个C#程序:   ...

  3. Qt 之 模仿 QQ登陆界面——样式篇

    一.简述 今天晚上花了半天时间从QQ登录界面抠了些图,顺便加了点样式基本上实现了QQ的登陆界面全部效果.虽不说100%相似,那也有99.99%相似了哈O(∩_∩)O. QQ好像从去年开始,登录界面有了 ...

  4. swift:用UITabBarController、UINavigationController、模态窗口简单的搭建一个QQ界面

    搭建一个QQ界面其实是一个很简单的实现,需要几种切换视图的控制器组合一起使用,即导航控制器.标签栏控制器.模态窗口.其中,将标签栏控制器设置为window的rootViewController,因为Q ...

  5. [转]Android:布局实例之模仿QQ登录界面

    Android:布局实例之模仿QQ登录界面 预览图: 准备: 1.找到模仿对象 QQ登陆界面UI下载>>>>> 2.导入工程 3.查看布局结构和使用控件 其对应效果图分布 ...

  6. HDFS设计思路,HDFS使用,查看集群状态,HDFS,HDFS上传文件,HDFS下载文件,yarn web管理界面信息查看,运行一个mapreduce程序,mapreduce的demo

    26 集群使用初步 HDFS的设计思路 l 设计思想 分而治之:将大文件.大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析: l 在大数据系统中作用: 为各类分布式 ...

  7. Android 模仿QQ风格的 UI

    本文内容 环境 演示模仿QQ风格的界面 本文主要演示的是 UI,如何模仿 QQ 风格的界面.虽然这个 UI 跟现在的QQ空间有点差别,但是也能学到很多东西. 下载 Demo 环境 Windows 7 ...

  8. Qt 模仿QQ截图 动态吸附直线

    最近在学Qt.学东西怎么能不动手. 就写了些小程序.看QQ截图能够动态吸附直线的功能挺有意思,所以就模仿了一个. 先上效果图 界面很简单..呵呵 移动鼠标,会把鼠标所在最小矩形选中.把没有选中的地方给 ...

  9. 循序渐进实现仿QQ界面(一):园角矩形与双缓冲贴图窗口

    印象里仿QQ界面的程序应该有很多,搜了一下,虽然出来一大堆,排除了重复的,却只有两三个,没我想象的好.经常看到CSDN上有人问,QQ这个功能怎么实现,那个界面怎么实现,归纳了一下,决定写这么一个仿QQ ...

随机推荐

  1. 【转】YUV格式&像素

    一幅彩色图像的基本要素是什么? 说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少.一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147 ...

  2. 用户控件(.ascx)与<ul><li>以及<a>布局之小结

    用户控件(.ascx)与<ul><li>以及<a>布局 小结 一.用户控件(.ascx) 1.aspx是浏览器直接访问的页面,而ascx是用户控件,一般是用来重用. ...

  3. oracle SQL语句练习MERGE、模糊查询、排序、

    Oracle支持的SQL指令可分为数据操作语言语句.数据定义语言语句.事务控制语句.会话控制语句等几种类型:1.数据操作语言语句数据操作语言语句(Data manipulation language, ...

  4. asp.net操作xml(增删查改)

    asp.net操作xml 1.xml文档Products.xml <?xml version="1.0" encoding="utf-8"?> &l ...

  5. sql两个表联合更新

    update TableA set id=TableB.id from TableA,TableB where TableA.name=TableB.name

  6. 关于java WEB下载

    web.xml配置mapping  页面直接配置路径就可下载 <mime-mapping>  <extension>doc</extension>  <mim ...

  7. silverlight+wcf 获得web参数

    可以由wcf直接得到参数 ,具体代码如下: using System;using System.Linq;using System.Runtime.Serialization;using System ...

  8. PDO事务管理DEMO

    try { $dsn = "mysql:host=127.0.0.1;port=3306;dbname=dab"; $pdo = new PDO($dsn, 'root', '') ...

  9. 一个cocos2d-x的项目

    前几天完成了一个cocos2d-x的项目,放在git上: https://github.com/gittor/Jigsaw 采用cocos的版本是3.7.1. 项目是一个拼图的游戏,市面上的拼图类游戏 ...

  10. 《APUE》读书笔记第十一章-线程

    本章主要介绍了线程,了解如何使用多线程在单进程环境中来执行多任务.由于多个线程共享其进程空间,所以必须采用同步的机制来保护数据的一致性. 一.线程的概念 典型的Unix系统都可以看成只有一个控制线程, ...