文档章节

MINIGUI 中主窗口、控件(即子窗口)的理解

For_MGP
 For_MGP
发布于 2015/06/16 14:32
字数 432
阅读 90
收藏 0

MINIGUI 中大体分为 主窗口、控件(即子窗口),而其他的一些都属于这两类,如对话框属于主窗口,按键等属于控件

对于主窗口、控件的理解,根据以下程序和效果图,更容易明白。

#include <stdio.h>
#include <stdlib.h>

#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>

/*
函数原型:
HWND GUIAPI CreateWindow(class_name, caption, style, id, x, y, w, h, parent, add_data)
*/


#define IDC_STATIC1    100
#define IDC_STATIC2    150
#define IDC_BUTTON1    110
#define IDC_BUTTON2    120
#define IDC_EDIT1    130
#define IDC_EDIT2    140

static int CreateWindow_s(HWND hWnd)
{
    HWND hStaticWnd1, hStaticWnd2, hButton1, hButton2, hEdit1, hEdit2;
    //创建一个静态框
    hStaticWnd1 = CreateWindow(CTRL_STATIC,
        "This is a static control",
        WS_CHILD | SS_NOTIFY | SS_SIMPLE | WS_VISIBLE | WS_BORDER,
        IDC_STATIC1,
        10, 10, 180, 300, hWnd, 0);

    //在 hStaticWnd1 中创建两个按钮控件
    hButton1 = CreateWindow(CTRL_BUTTON,
        "Button1",
        WS_CHILD | BS_PUSHBUTTON |WS_VISIBLE,
        IDC_BUTTON1,
        20, 20, 80, 20, hStaticWnd1, 0);
        
    hButton2 = CreateWindow(CTRL_BUTTON,
        "Button2",
        WS_CHILD |BS_PUSHBUTTON | WS_VISIBLE,
        IDC_BUTTON2,
        20, 50, 80, 20, hStaticWnd1, 0);
        
    //在 hStaticWnd1 中创建一个编辑框控件
    hEdit1 = CreateWindow(CTRL_EDIT,
        "Edit box 1",
        WS_CHILD | WS_VISIBLE | WS_BORDER,
        IDC_EDIT1,
        20, 80, 100, 24, hStaticWnd1, 0);
        
    //在 hStaticWnd1 中创建一个静态框 hStaticWnd2
    hStaticWnd2 = CreateWindow(CTRL_STATIC,
        "This is child static control",
        WS_CHILD | SS_NOTIFY | SS_SIMPLE | WS_VISIBLE | WS_BORDER,
        IDC_STATIC2,
        20, 110, 150, 50, hStaticWnd1, 0);
        
    //在 hStaticWnd2 中创建一个编辑框控件 hEdit2,这时, hEdit2 是 hStaticWnd1 的孙窗口
    hEdit2 = CreateWindow(CTRL_EDIT,
        "Edit Box 2",
        WS_CHILD | WS_VISIBLE | WS_BORDER,
        IDC_EDIT2,
        0, 20, 100, 24, hStaticWnd2, 0);
    return 0;
}

static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
    switch (message) {
        case MSG_CREATE:
            CreateWindow_s(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);
}
    
int MiniGUIMain (int argc, const char* argv[])
{
    MSG Msg;
    HWND hMainWnd;
    MAINWINCREATE CreateInfo;



 

    CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;
    CreateInfo.dwExStyle = WS_EX_NONE;
    CreateInfo.spCaption = "Hello, world";
    CreateInfo.hMenu = 0;
    CreateInfo.hCursor = GetSystemCursor(0);
    CreateInfo.hIcon = 0;
    CreateInfo.MainWindowProc = HelloWinProc;
    CreateInfo.lx = 0;
    CreateInfo.ty = 0;
    CreateInfo.rx = 320;
    CreateInfo.by = 240;
    CreateInfo.iBkColor = COLOR_lightwhite;
    CreateInfo.dwAddData = 0;
    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);
 

    return 0;
}


下图是在 Ubuntu 中得到的结果:

© 著作权归作者所有

共有 人打赏支持
For_MGP
粉丝 2
博文 66
码字总数 20576
作品 0
深圳
程序员
Linux 下的图形库介绍

在进行Linux下的图形系统编程时,我们常常会遇到以下这些概念: Framebuffer, X11, SDL,DFB, miniGUI, OpenGL,QT, GTK,KDE, GNOME等等。 一、Linux 图形领域的基础设施 1.1 X Window X W...

江河海流
2014/04/24
0
0
使用Automake,Autoconf生成Makefile

在Unix上写过程序的人尤其是用 C 来开发程序的人一般都遇到过 Makefile,用 make 来开发和编译程序的确很方便,可是要写出一个Makefile就不那么简单了。GNU Make 那份几百页的文件,让许多人...

AlphaJay
2012/02/21
0
0
android-- A10开发板--Tslib 移植心得体会

tslib,其实从他的名字就可以看出它的,它是touchscreen的lib,其实这样还不够具体,其实它开始确实是为了touchscreen的鼠标驱动而发展起来的,且只是一个中间处理库,即将原始数据进行调整,...

雨焰
2012/09/27
0
2
Godot脚本引擎入门-VisualScript(二)

本小节介绍了如何让控件自动移动 首先来看下测试结果,然后在教大家如何使用! 创建一个工程,创建一个node2d的节点,然后在创建一个label控件子节点 然后在node2d上添加我们的VisualScript脚...

spctomp2017
05/23
0
0
合格的嵌入式开发者应掌握的技能大全

嵌入式知识和技能体系庞大,样样精通者凤毛鳞角,一般都是一专多能,各类技能多少都能说上一点。按照嵌入式开发层次关系,整理嵌入式开发者技能大全如下: 1、处理器 MCU架构及开发。MCU俗称...

gunser
04/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java序列化(七) - fst 序列化

java序列化(七) - fst 序列化 github https://github.com/RuedigerMoeller/fast-serialization 实践 https://gitee.com/mengzhang6/serializable-demo.git maven依赖 <!-- https://mvnrepo......

晨猫
12分钟前
2
0
智力问题汇总

南京新建地铁线路,给你2块钱,测出来需要配置多少辆车? 参考答案:根据地铁有固定时间间隔,坐一圈该线路,推算出需要多少辆。 一共50张卡片,上面写着1--50 ,50个数字,藏起来一张,打乱...

职业搬砖工程师
16分钟前
1
0
ZFS-自我恢复RAID

ZFS-自我恢复RAID 这个给了我一个简单而又强大的理由,让我立马为之折服,ZFS可以自动的检测发生的错误,而且,可以自我修复这些错误。假设有一个时刻,磁盘阵列中的数据是错误的,不管是什么...

openthings
25分钟前
2
0
从Hash到一致性Hash原理(深度好文)

要讲一致性Hash原理,先从一般性Hash讲起,其实Hash的本质就是一个长度可变的数组,那为什么Hash的时间复杂度是O(1),而其他类型的数据结构查找都是要遍历来,遍历去,即便是树,二叉树,也是要经过几...

算法之名
38分钟前
12
0
软件测试工具书籍与面试题汇总下载(持续更新)

简介 本文是https://github.com/china-testing/python-api-tesing/blob/master/books.md 的节选。 欢迎转载,转载请附带此简介,谢谢! 试题 软件测试综合面试题(高级测试)-试题.pdf 软件测试...

python测试开发人工智能安全
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部