⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000004.htm

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -