文档章节

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

For_MGP
 For_MGP
发布于 2015/06/16 14:32
字数 432
阅读 79
收藏 0
点赞 0
评论 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
博文 46
码字总数 20576
作品 0
深圳
程序员
合格的嵌入式开发者应掌握的技能大全

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

gunser ⋅ 04/23 ⋅ 0

Godot脚本引擎入门-VisualScript(二)

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

spctomp2017 ⋅ 05/23 ⋅ 0

mfc控件位置调整和坐标确定

在mfc工程中控件或者窗口位置的调整是经常遇到的,特别是基于对话框的工程。位置的调整包括坐标、长度和宽度的变化,一般在窗口类的OnSize函数中实现。控件位置的调整涉及的函数有:GetWind...

智勇 ⋅ 2012/02/02 ⋅ 0

MFC—— 窗口句柄获取

创建窗口控件后,我们可能会在不同的窗口中需要操作其他窗口中的内容(即可向该窗口类类发送消息、处理程序),因而就需要一个句柄来控制对应的窗口,下面是获得不同句柄的方法: 获取所在类...

perfectguyipeng ⋅ 2017/03/04 ⋅ 0

Android Hierarchy Viewer

Android的SDK工具包中,有很多十分有用的工具,可以帮助程序员开发和测试Android应用程序,大大提高其工作效率。其中的一款叫Hierachy Viewer的可视化调试工具,可以很方便地帮助开发者分析,...

长平狐 ⋅ 2013/01/06 ⋅ 0

Android View的工作流程

前言 ViewRootImpl performTraversals measure layout draw invalidate View的脏区域和实心控件 View ViewGroup ViewRootImpl requestLayout 总结 前言 在上一篇Window机制探索中我们知道,在......

微笑的江豚 ⋅ 01/12 ⋅ 0

topic6:Qt入门之常用qt控件认知之QLayout

了解布局,首先得清楚一个概念,就是容器控件。容器控件就是可以容纳别的控件的一种控件,如QWidget,所以就会出现父类控件与子类控件。为了很好的管理这种父子类控件,常用的有几种方法: ...

zhouhb1 ⋅ 2013/07/04 ⋅ 0

WS_CLIPCHILDREN和WS_CLIPSIBLINGS的理解

我是个喜欢瞎琢磨的人。尤其是这几天心情非常郁闷。于是开始琢磨了…….琢磨的问题就是WSCLIPCHILDREN和WSCLIPSIBLINGS两种窗口样式的理解。   1.求助MSDN   我的第一步当然是求助MSDN。...

小青_1989 ⋅ 2014/05/30 ⋅ 0

Linux 下的图形库介绍

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

江河海流 ⋅ 2014/04/24 ⋅ 0

几个WM消息其lParam和wParam参数定义

几个WM消息其lParam和wParam参数定义 鼠标消息 lParam:低字组为x 座标,高字组为y 座标,这两个座标是相对于窗口显示区域左上角的位置。 Wparam:指示滑鼠按键以及Shift和Ctrl 键的状态。可...

IMGTN ⋅ 2012/10/03 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vue使用mockjs

在使用vue开发的时候,一直疑惑与mockjs怎么用,开了mockjs的开发文档,还是一脸蒙蔽,无从下手!mockjs在前后端分离开发上进行模拟数据,是不可避掉的一环。在网上看了一些博文还有查阅了其...

JamesView ⋅ 18分钟前 ⋅ 0

解决问题的思路

1.相对来说,程序逻辑解决问题的思路应该更加趋向于通过逻辑结构来解决问题,而不是通过更小的类级别和方法级别的改进 2.类级别和方法级别的改进需要的技术能力更高一点

th778899 ⋅ 24分钟前 ⋅ 0

HTTP请求状态及jQuery AJAX请求异常处理

上一周调优一个项目的Js部分,其中一个严重的问题就是在页面初始化数据时,没有对异常进行处理, 导致Loading一直在等待中,无提示无处理。在用户体验上很不好,即使网络条件无法保证,在出错...

临江仙卜算子 ⋅ 24分钟前 ⋅ 0

error code 1874. innodb is in read only mode--报错解决

参考网页 https://zhidao.baidu.com/question/746894876932022292.html https://blog.csdn.net/shushugood/article/details/80226767 问题背景 创建了一个数据库然后想删除,因为自己本机性能......

karma123 ⋅ 26分钟前 ⋅ 0

JVM系列:jinfo命令详解

jinfo全称Java Configuration Info,主要作用是实时查看和调整JVM配置参数。 一.查看JVM参数 用法:jinfo -flag <name> PID 示例: # jinfo -flag MaxMetaspaceSize 11180 # -XX:MaxMetaspac......

Jacktanger ⋅ 30分钟前 ⋅ 0

exportfs命令、NFS客户端问题、FTP介绍、使用vsftpd搭建ftp

1. exportfs命令 一般情况下重启服务器上nfs服务时,需把客户端上的挂载先卸载掉,以免进程后面杀不掉。当客户端服务器很多时,操作起来就比较麻烦。此时可以使用exportfs命令重新加载下。 ...

laoba ⋅ 39分钟前 ⋅ 0

基于Python的信用评分卡模型分析

信用风险计量体系包括主体评级模型和债项评级两部分。主体评级和债项评级均有一系列评级模型组成,其中主体评级模型可用“四张卡”来表示,分别是A卡、B卡、C卡和F卡;债项评级模型通常按照主...

火力全開 ⋅ 41分钟前 ⋅ 0

执行make命令时报错g++: Command not found

执行make命令时报错g++: Command not found 2016年10月24日 12:31:29 阅读数:4366 朋友安装node时遇到的问题 报错截图: 其实很简单只需要安装一下 yum -y install gcc automake autoconf l...

rootliu ⋅ 41分钟前 ⋅ 0

Loongnix(龙芯)系统,优盘安装指南

U盘安装分为两种方式:"usb disk" 及 "usb cd"。其中usb cd是将usb disk做为usb光驱使用。 usb disk安装步骤: 需要准备一个大小超过3.5G的U盘,格式化ext3格式 下载安装光盘镜像xxx.iso,将...

gugudu ⋅ 44分钟前 ⋅ 0

HTML5中meta属性的使用详解

meta属性在HTML中占据了很重要的位置。如:针对搜索引擎的SEO,文档的字符编码,设置刷新缓存等。虽然一些网页可能没有使用meta,但是作为正规军,我们还是有必要了解一些meta的属性,并且能...

guorongjin ⋅ 47分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部