📄 00000004.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: Kongming (没日没夜...), 信区: Linux <BR>标 题: MiniGUI 的特色(2) <BR>发信站: BBS 水木清华站 (Fri Jul 2 16:02:03 1999) <BR> <BR> <BR>二、窗口 <BR> <BR>2.1 应用程序和主窗口 <BR> <BR> 我们将基于 MiniGUI 的一个会话(session)称为一个应用项目,而 <BR>其中每个单独的线程或线程组称为应用。每个应用项目可建立多个应用。 <BR>主窗口是建立在 MiniGUI 基础上的应用的主界面。MiniGUI 为每个主窗口 <BR>建立单独的消息队列,在该主窗口基础上派生出的窗片、对话框及其控件 <BR>均使用同一消息队列。在 MiniGUI 中,每个应用对应于一个线程。理论 <BR>上讲,每个应用可以具备多个主窗口,但在 MiniGUI 中,主窗口均以单独 <BR>的线程实现。但多个主窗口对应单一线程的情况也是可以在 MiniGUI 中实 <BR>现的。 <BR> 每个应用项目有一个 MiniGUIMain 函数,在这个函数中,可建立初始 <BR>的应用线程。在调用 MiniGUIMain 之前,MiniGUI 启动自己的桌面窗口 <BR>(Desktop)。桌面窗口作为 MiniGUI 的窗口管理器而存在。下面的代码段 <BR>在 MiniGUIMain 中启动了三个主窗口线程: <BR> <BR>int MiniGUIMain(int args, char* arg[]) <BR>{ <BR> pthread_t thread, thread2, thread3; <BR> <BR> CreateThreadForMainWindow(&thread, NULL, TestWindowMain, 0); <BR> <BR> CreateThreadForMainWindow(&thread2, NULL, TestWindowMain2, 0); <BR> <BR> CreateThreadForMainWindow(&thread3, NULL, TestWindowMain3, 0); <BR> <BR> return 0; <BR>} <BR> <BR> CreateThreadForMainWindow 函数为主窗口建立线程,并返回线程标识符。 <BR> 其中的第三个参数是线程的入口函数地址。如下的代码段定义了上述代码 <BR>中第一个主窗口线程的入口函数: <BR> <BR>void InitCreateInfo(PMAINWINCREATE pCreateInfo) <BR>{ <BR> pCreateInfo->dwStyle = WS_THICKFRAME; <BR> pCreateInfo->spCaption = "The first main window" ; <BR> pCreateInfo->hMenu = 0; <BR> pCreateInfo->hCursor = GetSystemCursor(2); <BR> pCreateInfo->hIcon = LoadIconFromFile("res/table.ico"); <BR> pCreateInfo->MainWindowProc = TestMainWinProc; <BR> pCreateInfo->lx = 50; <BR> pCreateInfo->ty = 50; <BR> pCreateInfo->rx = 300; <BR> pCreateInfo->by = 480; <BR> pCreateInfo->iBkColor = COLOR_lightwhite; <BR> pCreateInfo->dwAddData1 = 0; <BR> pCreateInfo->dwAddData2 = 0; <BR>} <BR> <BR>void* TestWindowMain(void* data) <BR>{ <BR> MSG Msg; <BR> <BR> MAINWINCREATE CreateInfo; <BR> HWND hMainWnd; <BR> <BR> InitCreateInfo(&CreateInfo); <BR> <BR> if( !(hMainWnd = CreateMainWindow(&CreateInfo)) ) <BR> return NULL; <BR> <BR> ShowWindow(hMainWnd, SW_SHOWNORMAL); <BR> <BR> while( GetMessage(&Msg, hMainWnd) ) { <BR> DispatchMessage(&Msg); <BR> } <BR> <BR> MainWindowThreadCleanup(hMainWnd); <BR> return NULL; <BR>} <BR> <BR> 在上面的代码段中,该线程首先调用 CreateMainWindow建立了主窗口, <BR>然后调用 ShowWindow显示了主窗口,最后启动了消息循环。当消息循环因为 <BR>接收到 MSG_QUIT 消息而终止时,该函数调用了 MainWindowThreadCleanup <BR>清除了相关的线程数据。 <BR> 从上述代码中可看出主函数不支持窗口类,在调用 CreateMainWindow <BR>函数时直接指定主窗口的窗口过程地址。我们也可以从中看到主窗口所支持 <BR>的其他属性: <BR> <BR> 1.窗口风格。表 2.1 给出了所支持的窗口风格 <BR> <BR> 表 2.1 MiniGUI 支持的主窗口风格 <BR> 风格 描述 <BR> ---------------------------------------------------------------- <BR> WS_BORDER 创建一个具有单线边框的窗口 <BR> WS_THICKFRAME 创建一个具有宽边框的窗口 <BR> WS_THINFRAME 创建一个具有细边框的窗口 <BR> WS_CAPTION 创建一个具有标题栏的窗口 <BR> WS_HSCROLL 创建一个具有水平滚动条的窗口 <BR> WS_MAXMIZEBOX 创建一个具有最大化框的窗口 <BR> WS_MINIMIZEBOX 创建一个具有最小化框的窗口 <BR> WS_SYSMENU 创建一个具有系统菜单的窗口 <BR> WS_VSCROLL 创建一个具有垂直滚动条的窗口 <BR> WS_DISABLED 创建一个初始为禁止的窗口 <BR> WS_MAXIMIZE 创建一个初始最大化的窗口 <BR> WS_MINIMIZE 创建一个初始最小化的窗口 <BR> WS_VISIBLE 创建一个初始可见的窗口 <BR> WS_EX_TOPMOST 创建一个顶层窗口,这是一个 Win32 的扩展风格 <BR> <BR> 2.窗口标题。 <BR> 3.窗口菜单。 <BR> 4.窗口图标。 <BR> 5.窗口背景色。 <BR> <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -