文档章节

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

For_MGP
 For_MGP
发布于 2015/06/16 14:32
字数 432
阅读 87
收藏 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
合格的嵌入式开发者应掌握的技能大全

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

gunser
04/23
0
0
Godot脚本引擎入门-VisualScript(二)

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

spctomp2017
05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
0
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
0
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0
OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享水木年华的单曲《中学时代》@小小编辑 手机党少年们想听歌,请使劲儿戳(这里) @须臾时光:夏天还在做最后的挣扎,但是晚上...

小小编辑
今天
18
4
centos7安装redis及开机启动

配置编译环境: sudo yum install gcc-c++ 下载源码: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 解压源码: tar -zxvf redis-3.2.8.tar.gz 进入到解压目录: cd redis-3......

hotsmile
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部