当前位置: 首页 > 工具软件 > MiniGUI > 使用案例 >

MiniGUI——第一个程序helloworld

秦承允
2023-12-01

 

文章目录

  • 一、窗口过程和句柄是什么?
  • 二、helloworld代码部分以及部分代码的解释

 

 


一、窗口过程和句柄是什么?


提示:以下是本篇文章正文内容

1、窗口过程是什么?

        窗口过程是一个特定类型的函数,用来接收和处理所有发送到该窗口的消息。每个控件类都有一个窗口过程,属于同一控件类的所有控件共用一个窗口过程来处理消息。窗口过程函数是MiniGUI程序的主体部分,应用程序实际所做的工作大部分都发生在窗口过程函数中,因为MiniGUI程序的主要任务就是接收和处理窗口收到的各种消息。窗口过程函数由MiniGUI调用,是一个回调函数。

窗口过程函数一般定义的形式:

static int HelloWinPro(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)

        hWnd:接收消息的窗口的句柄,与CreateMainWindow函数的返回值相同,该值标识了接收该消息的特定窗口。(何为句柄? 下面会说)

        message:与MSG结构中的message域相同,是一个标识窗口所收到消息的整数值。

        wParam和IParam:都是32位的消息参数。

2、句柄是什么?

        句柄(Handle)是一个用来标识对象或项目的标识符,可以用来描述窗体、文件等。在 MiniGUI 中,使用句柄访问窗口、控件、菜单、图标等。

eg: 窗口句柄:是用来标识窗口的唯一值。每个窗口都对应一个句柄,所有的句柄都不会重复,根据句柄可以获取对应窗口的相关信息。

 

 

二、代码部分

1.helloworld代码部分

#include <stdio.h>
#include <minigui/common.h>   //包括MiniGUI常用的宏以及数据类型的定义
#include <minigui/minigui.h>  //包含全局接口函数和通用接口函数以及某些杂项函数的定义
#include <minigui/gdi.h>      //包含MiniGUI绘图函数的接口定义
#include <minigui/window.h>    //包含窗口有关的宏、数据类型、数据结构定义以及函数接口声明
static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)//窗口过程函数
{
    HDC hdc;
    switch (message) {
    case MSG_PAINT:                //该消息在需要进行窗口重绘时发送到窗口过程,处理完该消息后    直接返回
        hdc = BeginPaint (hWnd);       //获取设备上下文句柄
        //TextOut (hdc, 100, 100, "Hello world!");//文本的输出
        SetPenColor(hdc, PIXEL_red);
        Rectangle (hdc, 100, 100, 200, 200);
        EndPaint (hWnd, hdc);           //释放设备上下文句柄
        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;
    #ifdef _LITE_VERSION
    SetDesktopRect(0, 0, 800, 600);
    #endif
    CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;
    CreateInfo.dwExStyle = WS_EX_NONE;
    CreateInfo.spCaption = "HelloWorld";
    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;
}
#ifndef _LITE_VERSION
#include <minigui/dti.c>
#endif

 

 

2.部分代码解释

 

PostQuitMessage (hWnd);       

        该消息在消息队列中设置一个QS_QUIT标志。GetMessage在从指定消息队列中获取消息时,会检查该标准,如果有QS_QUIT标志,GetMessage消息将返回FALSE,从而可以利用该返回值终止消息循环 。

SetDesktopRect(0, 0, 800, 600);

        在MiniGUI-Lite版本中,每个MiniGUI客户端程序在调用其它MiniGUI函数之前必须调用该函数以设置程序的桌面显示矩形区域。

 

CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;

CreateInfo.dwStyle——窗口的风格。

WS_VISIBLE——创建⼀个初始状态为可见的窗⼝

WS_BORDER——创建⼀个单边框的窗⼝

WS_CAPTION——标题栏

CreateInfo.dwExStyle = WS_EX_NONE;

 CreateInfo.dwExStyle——窗口的附加风格。

 WS_EX_NONE——表示无附加窗口风格

CreateInfo.spCaption = "HelloWorld";

  CreateInfo.spCaption ——窗口的标题。

CreateInfo.hMenu = 0;

  CreateInfo.hMenu——附加在窗口上的菜单句柄,设置窗口的主菜单

  CreateInfo.hMenu = 0;表示该窗口无主菜单

CreateInfo.hCursor = GetSystemCursor(0);

  CreateInfo.hCursor—— 在窗口中所使用的鼠标光标句柄

  GetSystemCursor(0);——设置主窗口的光标为系统缺省光标。(即系统默认的光标)

 

CreateInfo.hIcon = 0;

  CreateInfo.hIcon ——程序的图标 

  CreateInfo.hIcon = 0;表示该窗口没有图标

CreateInfo.MainWindowProc = HelloWinProc;

   CreateInfo.MainWindowProc= HelloWinProc ——设置主窗口的过程函数为HelloWinProc,发往该  窗口的消息由该函数处理
 

    CreateInfo.lx = 0;
    CreateInfo.ty = 0;
    CreateInfo.rx = 320;
    CreateInfo.by = 240;

 设置窗口在屏幕的位置,该窗口左上角位于(0,0),右下角位于(320,240).

    CreateInfo.lx——窗口左上角相对屏幕的绝对横坐标
    CreateInfo.ty ——窗口左上角相对屏幕的绝对纵坐标
    CreateInfo.rx ——窗口右下角相对屏幕的绝对横坐标
    CreateInfo.by ——窗口右下角相对屏幕的绝对纵坐标

CreateInfo.iBkColor = COLOR_lightwhite;

 CreateInfo.iBkColor——设置窗口的背景颜色

 CreateInfo.iBkColor = COLOR_lightwhite;表示设置主窗口的颜色为白色

CreateInfo.dwAddData = 0;

  CreateInfo.dwAddData ——窗口的附加数据

  CreateInfo.dwAddData = 0; 表示窗口无附加数据

CreateInfo.hHosting = HWND_DESKTOP;

 CreateInfo.hHosting——设置主窗口的托管窗口

 CreateInfo.hHosting = HWND_DESKTOP;表示设置主窗口的托管窗口为桌面窗口

 ShowWindow(hMainWnd, SW_SHOWNORMAL);

        显示窗口;

        第一个参数为所要显示的窗口的窗口句柄,第二个参数指明显示方式(显示或者隐藏,SW_SHOWNORMAL说明要显示主窗口,并把它置为顶窗口)。 调用ShowWindow函数后主窗口会出现在屏幕上,之后便进入消息循环

TranslateMessage(&Msg);

 TranslateMessage函数把击键消息转化为MSG_CHAR消息,然后直接发送到窗口过程函数。

 DispatchMessage(&Msg);

 DispatchMessage函数最终将把消息发往该消息的目标窗口过程,让它进行处理。

 MainWindowThreadCleanup (hMainWnd);

 清除主窗口所使用的消息队列、内存等系统资源,并由MiniGUIMain返回。

 

 

  参考资料———《MiniGUI编程指南》

 

 

 

 

 

 类似资料: