window.h
上传用户:sdaoma
上传日期:2013-08-07
资源大小:3838k
文件大小:200k
源码类别:

GPS编程

开发平台:

C/C++

  1. /**
  2.  * file window.h
  3.  * author Wei Yongming <ymwei@minigui.org>
  4.  * date 2002/01/26
  5.  * 
  6.  * This file includes windowing interfaces of MiniGUI.
  7.  *
  8.  verbatim
  9.     Copyright (C) 1998-2002 Wei Yongming.
  10.     Copyright (C) 2002-2004 Feynman Software.
  11.     This file is part of MiniGUI, a compact cross-platform Graphics 
  12.     User Interface (GUI) support system for real-time embedded systems.
  13.     This program is free software; you can redistribute it and/or modify
  14.     it under the terms of the GNU General Public License as published by
  15.     the Free Software Foundation; either version 2 of the License, or
  16.     (at your option) any later version.
  17.     This program is distributed in the hope that it will be useful,
  18.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.     GNU General Public License for more details.
  21.     You should have received a copy of the GNU General Public License
  22.     along with this program; if not, write to the Free Software
  23.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  24.  endverbatim
  25.  */
  26. /* 
  27.  * $Id: window.h,v 1.132 2004/09/16 06:53:35 snig Exp $
  28.  *
  29.  *             MiniGUI for Linux/uClinux, eCos, uC/OS-II, VxWorks version 1.6.x
  30.  *             Copyright (C) 1998-2002 Wei Yongming.
  31.  *             Copyright (C) 2002-2004 Feynman Software.
  32.  */
  33. #ifndef _MGUI_WINDOW_H
  34.     #define _MGUI_WINDOW_H
  35. #ifdef __cplusplus
  36. extern "C" {
  37. #endif  /* __cplusplus */
  38.     /**
  39.      * defgroup msgs Messages
  40.      * @{
  41.      */
  42. /* definitions of common messages. */
  43. #define MSG_SYNCMSG         0x0000
  44. #define MSG_NULLMSG         0x0000
  45.     /**
  46.      * defgroup mouse_msgs Mouse event messages
  47.      * @{
  48.      */
  49.     /* Group 1 from 0x0001 to 0x000F, the mouse messages. */
  50. #define MSG_FIRSTMOUSEMSG   0x0001
  51. /**
  52.  * def MSG_LBUTTONDOWN
  53.  * brief Left mouse button down message.
  54.  *
  55.  * This message is posted to the window when the user presses down
  56.  * the left button of the mouse in the client area of the window.
  57.  *
  58.  * code
  59.  * MSG_LBUTTONDOWN
  60.  * DWORD key_flags = (DWORD)wParam;
  61.  * int x_pos = LOSWORD (lParam);
  62.  * int y_pos = HISWORD (lParam);
  63.  * endcode
  64.  *
  65.  * param key_flags The shift key status when this message occurred.
  66.  * param x_pos,y_pos The position of the mouse in client coordinates.
  67.  *
  68.  * sa MSG_LBUTTONUP, key_defs
  69.  *
  70.  * Example:
  71.  * include buttondown.c
  72.  */
  73. #define MSG_LBUTTONDOWN     0x0001
  74. /**
  75.  * def MSG_LBUTTONUP
  76.  * brief Left mouse button up message.
  77.  *
  78.  * This message is posted to the window when the user releases up
  79.  * the left button of the mouse in the client area of the window.
  80.  *
  81.  * code
  82.  * MSG_LBUTTONUP
  83.  * DWORD key_flags = (DWORD)wParam;
  84.  * int x_pos = LOSWORD (lParam);
  85.  * int y_pos = HISWORD (lParam);
  86.  * endcode
  87.  *
  88.  * param key_flags The shift key status when this message occurred.
  89.  * param x_pos,y_pos The position of the mouse in client coordinates.
  90.  *
  91.  * sa MSG_LBUTTONDOWN, key_defs
  92.  */
  93. #define MSG_LBUTTONUP       0x0002
  94. /**
  95.  * def MSG_LBUTTONDBLCLK
  96.  * brief Left mouse button double clicked message.
  97.  *
  98.  * This message is posted to the window when the user double clicks
  99.  * the left button of the mouse in the client area of the window.
  100.  *
  101.  * code
  102.  * MSG_LBUTTONDBLCLK
  103.  * DWORD key_flags = (DWORD)wParam;
  104.  * int x_pos = LOSWORD (lParam);
  105.  * int y_pos = HISWORD (lParam);
  106.  * endcode
  107.  *
  108.  * param key_flags The shift key status when this message occurred.
  109.  * param x_pos,y_pos The position of the mouse in client coordinates.
  110.  *
  111.  * sa MSG_RBUTTONDBLCLK, key_defs
  112.  */
  113. #define MSG_LBUTTONDBLCLK   0x0003
  114. /**
  115.  * def MSG_MOUSEMOVE
  116.  * brief The mouse moved message.
  117.  *
  118.  * This message is posted to the window when the user moves the mouse
  119.  * in the client area of the window.
  120.  *
  121.  * code
  122.  * MSG_MOUSEMOVE
  123.  * DWORD key_flags = (DWORD)wParam;
  124.  * int x_pos = LOSWORD (lParam);
  125.  * int y_pos = HISWORD (lParam);
  126.  * endcode
  127.  *
  128.  * param key_flags The shift key status when this message occurred.
  129.  * param x_pos,y_pos The position of the mouse in client coordinates.
  130.  *
  131.  * sa key_defs
  132.  */
  133. #define MSG_MOUSEMOVE       0x0004
  134. /**
  135.  * def MSG_RBUTTONDOWN
  136.  * brief Right mouse button down message.
  137.  *
  138.  * This message is posted to the window when the user presses down
  139.  * the right button of the mouse in the client area of the window.
  140.  *
  141.  * code
  142.  * MSG_RBUTTONDOWN
  143.  * DWORD key_flags = (DWORD)wParam;
  144.  * int x_pos = LOSWORD (lParam);
  145.  * int y_pos = HISWORD (lParam);
  146.  * endcode
  147.  *
  148.  * param key_flags The shift key status when this message occurred.
  149.  * param x_pos,y_pos The position of the mouse in client coordinates.
  150.  *
  151.  * sa MSG_RBUTTONUP, key_defs
  152.  *
  153.  * Example:
  154.  * include buttondown.c
  155.  */
  156. #define MSG_RBUTTONDOWN     0x0005
  157. /**
  158.  * def MSG_RBUTTONUP
  159.  * brief Right mouse button up message.
  160.  *
  161.  * This message is posted to the window when the user releases up
  162.  * the right button of the mouse in the client area of the window.
  163.  *
  164.  * code
  165.  * MSG_RBUTTONUP
  166.  * DWORD key_flags = (DWORD)wParam;
  167.  * int x_pos = LOSWORD (lParam);
  168.  * int y_pos = HISWORD (lParam);
  169.  * endcode
  170.  *
  171.  * param key_flags The shift key status when this message occurred.
  172.  * param x_pos,y_pos The position of the mouse in client coordinates.
  173.  *
  174.  * sa MSG_RBUTTONDOWN, key_defs
  175.  */
  176. #define MSG_RBUTTONUP       0x0006
  177. /**
  178.  * def MSG_RBUTTONDBLCLK
  179.  * brief Right mouse button double clicked message.
  180.  *
  181.  * This message is posted to the window when the user double clicks
  182.  * the right button of the mouse in the client area of the window.
  183.  *
  184.  * code
  185.  * MSG_RBUTTONDBLCLK
  186.  * DWORD key_flags = (DWORD)wParam;
  187.  * int x_pos = LOSWORD (lParam);
  188.  * int y_pos = HISWORD (lParam);
  189.  * endcode
  190.  *
  191.  * param key_flags The shift key status when this message occurred.
  192.  * param x_pos,y_pos The position of the mouse in client coordinates.
  193.  *
  194.  * sa MSG_LBUTTONDBLCLK, key_defs
  195.  */
  196. #define MSG_RBUTTONDBLCLK   0x0007
  197. #define MSG_NCMOUSEOFF      0x0007
  198. /**
  199.  * def MSG_NCLBUTTONDOWN
  200.  * brief Left mouse button down message in the non-client area.
  201.  *
  202.  * This message is posted to the window when the user presses down
  203.  * the left button of the mouse in the non-client area of the window.
  204.  *
  205.  * code
  206.  * MSG_NCLBUTTONDOWN
  207.  * int hit_code = (int)wParam;
  208.  * int x_pos = LOSWORD (lParam);
  209.  * int y_pos = HISWORD (lParam);
  210.  * endcode
  211.  *
  212.  * param hit_code The hit test code which tells the area of the mouse.
  213.  * param x_pos,y_pos The position of the mouse in window coordinates.
  214.  *
  215.  * sa MSG_NCLBUTTONUP, MSG_NCHITTEST
  216.  */
  217. #define MSG_NCLBUTTONDOWN   0x0008
  218. /**
  219.  * def MSG_NCLBUTTONUP
  220.  * brief Left mouse button up message in the non-client area.
  221.  *
  222.  * This message is posted to the window when the user releases up
  223.  * the left button of the mouse in the non-client area of the window.
  224.  *
  225.  * code
  226.  * MSG_NCLBUTTONUP
  227.  * int hit_code = (int)wParam;
  228.  * int x_pos = LOSWORD (lParam);
  229.  * int y_pos = HISWORD (lParam);
  230.  * endcode
  231.  *
  232.  * param hit_code The hit test code which tells the area of the mouse.
  233.  * param x_pos,y_pos The position of the mouse in window coordinates.
  234.  *
  235.  * sa MSG_NCLBUTTONDOWN, MSG_NCHITTEST
  236.  */
  237. #define MSG_NCLBUTTONUP     0x0009
  238. /**
  239.  * def MSG_NCLBUTTONDBLCLK
  240.  * brief Left mouse button double clicked in the non-client area.
  241.  *
  242.  * This message is posted to the window when the user double clicks
  243.  * the left button of the mouse in the non-client area of the window.
  244.  *
  245.  * code
  246.  * MSG_NCLBUTTONDBLCLK
  247.  * int hit_code = (int)wParam;
  248.  * int x_pos = LOSWORD (lParam);
  249.  * int y_pos = HISWORD (lParam);
  250.  * endcode
  251.  *
  252.  * param hit_code The hit test code which tells the area of the mouse.
  253.  * param x_pos,y_pos The position of the mouse in window coordinates.
  254.  *
  255.  * sa MSG_NCRBUTTONDBLCLK, MSG_NCHITTEST
  256.  */
  257. #define MSG_NCLBUTTONDBLCLK 0x000A
  258. /**
  259.  * def MSG_NCMOUSEMOVE
  260.  * brief Mouse moves in the non-client area.
  261.  *
  262.  * This message is posted to the window when the user moves the mouse
  263.  * in the non-client area of the window.
  264.  *
  265.  * code
  266.  * MSG_NCMOUSEMOVE
  267.  * int hit_code = (int)wParam;
  268.  * int x_pos = LOSWORD (lParam);
  269.  * int y_pos = HISWORD (lParam);
  270.  * endcode
  271.  *
  272.  * param hit_code The hit test code which tells the area of the mouse.
  273.  * param x_pos,y_pos The position of the mouse in window coordinates.
  274.  *
  275.  * sa MSG_NCHITTEST
  276.  */
  277. #define MSG_NCMOUSEMOVE     0x000B
  278. /**
  279.  * def MSG_NCRBUTTONDOWN
  280.  * brief Right mouse button down message in the non-client area.
  281.  *
  282.  * This message is posted to the window when the user presses down
  283.  * the right button of the mouse in the non-client area of the window.
  284.  *
  285.  * code
  286.  * MSG_NCRBUTTONDOWN
  287.  * int hit_code = (int)wParam;
  288.  * int x_pos = LOSWORD (lParam);
  289.  * int y_pos = HISWORD (lParam);
  290.  * endcode
  291.  *
  292.  * param hit_code The hit test code which tells the area of the mouse.
  293.  * param x_pos,y_pos The position of the mouse in window coordinates.
  294.  *
  295.  * sa MSG_NCRBUTTONUP, MSG_NCHITTEST
  296.  */
  297. #define MSG_NCRBUTTONDOWN   0x000C
  298. /**
  299.  * def MSG_NCRBUTTONUP
  300.  * brief Right mouse button up message in the non-client area.
  301.  *
  302.  * This message is posted to the window when the user releases  up
  303.  * the right button of the mouse in the non-client area of the window.
  304.  *
  305.  * code
  306.  * MSG_NCRBUTTONUP
  307.  * int hit_code = (int)wParam;
  308.  * int x_pos = LOSWORD (lParam);
  309.  * int y_pos = HISWORD (lParam);
  310.  * endcode
  311.  *
  312.  * param hit_code The hit test code which tells the area of the mouse.
  313.  * param x_pos,y_pos The position of the mouse in window coordinates.
  314.  *
  315.  * sa MSG_NCRBUTTONDOWN, MSG_NCHITTEST
  316.  */
  317. #define MSG_NCRBUTTONUP     0x000D
  318. /**
  319.  * def MSG_NCRBUTTONDBLCLK
  320.  * brief Right mouse button double clicked in the non-client area.
  321.  *
  322.  * This message is posted to the window when the user double clicks
  323.  * the right button of the mouse in the non-client area of the window.
  324.  *
  325.  * code
  326.  * MSG_NCRBUTTONDBLCLK
  327.  * int hit_code = (int)wParam;
  328.  * int x_pos = LOSWORD (lParam);
  329.  * int y_pos = HISWORD (lParam);
  330.  * endcode
  331.  *
  332.  * param hit_code The hit test code which tells the area of the mouse.
  333.  * param x_pos,y_pos The position of the mouse in window coordinates.
  334.  *
  335.  * sa MSG_NCLBUTTONDBLCLK, MSG_NCHITTEST
  336.  */
  337. #define MSG_NCRBUTTONDBLCLK 0x000E
  338. #define MSG_LASTMOUSEMSG    0x000F
  339.     /** @} end of mouse_msgs */
  340.     /**
  341.      * defgroup key_msgs Key event messages
  342.      * @{
  343.      */
  344.     /* Group 2 from 0x0010 to 0x001F, the key messages. */
  345. #define MSG_FIRSTKEYMSG     0x0010
  346. /**
  347.  * def MSG_KEYDOWN
  348.  * brief User presses a key down.
  349.  *
  350.  * This message is posted to the current active window when the user 
  351.  * presses a key down.
  352.  *
  353.  * code
  354.  * MSG_KEYDOWN
  355.  * int scancode = (int)wParam;
  356.  * DWORD key_flags = (DWORD)lParam;
  357.  * endcode
  358.  *
  359.  * param scancode The scan code of the pressed key.
  360.  * param key_flags The shift key status when this message occurred.
  361.  *
  362.  * sa MSG_KEYUP, key_defs
  363.  *
  364.  * Example:
  365.  *
  366.  * include keydown.c
  367.  */
  368. #define MSG_KEYDOWN         0x0010
  369. /**
  370.  * def MSG_CHAR
  371.  * brief A character translated from MSG_KEYDOWN message.
  372.  *
  373.  * This message is translated from a MSG_KEYDOWN message by a TranslateMessage 
  374.  * and sent to the current active window.
  375.  *
  376.  * code
  377.  * MSG_CHAR
  378.  * int ch = (int)wParam;
  379.  * DWORD key_flags = (DWORD)lParam;
  380.  * endcode
  381.  *
  382.  * param ch The ASCII code of the pressed key.
  383.  * param key_flags The shift key status when this message occurred.
  384.  *
  385.  * sa MSG_SYSCHAR, TranslateMessage, key_defs
  386.  */
  387. #define MSG_CHAR            0x0011
  388. /**
  389.  * def MSG_KEYUP
  390.  * brief User releases up a key.
  391.  *
  392.  * This message is posted to the current active window when the user 
  393.  * releases up a key.
  394.  *
  395.  * code
  396.  * MSG_KEYUP
  397.  * int scancode = (int)wParam;
  398.  * DWORD key_flags = (DWORD)lParam;
  399.  * endcode
  400.  *
  401.  * param scancode The scan code of the released key.
  402.  * param key_flags The shift key status when this message occurred.
  403.  *
  404.  * sa MSG_KEYDOWN, key_defs
  405.  */
  406. #define MSG_KEYUP           0x0012
  407. /**
  408.  * def MSG_SYSKEYDOWN
  409.  * brief User presses down a key when <Alt> key is down.
  410.  *
  411.  * This message is posted to the current active window when the user 
  412.  * presses down a key as <Alt> key is down.
  413.  *
  414.  * code
  415.  * MSG_SYSKEYDOWN
  416.  * int scancode = (int)wParam;
  417.  * DWORD key_flags = (DWORD)lParam;
  418.  * endcode
  419.  *
  420.  * param scancode The scan code of the pressed key.
  421.  * param key_flags The shift key status when this message occurred.
  422.  *
  423.  * sa MSG_SYSKEYUP, MSG_SYSCHAR, key_defs
  424.  */
  425. #define MSG_SYSKEYDOWN      0x0013
  426. /**
  427.  * def MSG_SYSCHAR
  428.  * brief A system character translated from MSG_SYSKEYDOWN message.
  429.  *
  430.  * This message is translated from a MSG_SYSKEYDOWN message by a TranslateMessage 
  431.  * and sent to the current active window.
  432.  *
  433.  * code
  434.  * MSG_SYSCHAR
  435.  * int ch = (int)wParam;
  436.  * DWORD key_flags = (DWORD)lParam;
  437.  * endcode
  438.  *
  439.  * param ch The ASCII code of the pressed key.
  440.  * param key_flags The shift key status when this message occurred.
  441.  *
  442.  * sa MSG_CHAR, TranslateMessage, key_defs
  443.  */
  444. #define MSG_SYSCHAR         0x0014
  445. /**
  446.  * def MSG_SYSKEYUP
  447.  * brief User releases up a key when <Alt> key is down.
  448.  *
  449.  * This message is posted to the current active window when the user 
  450.  * releases up a key as <Alt> key is down.
  451.  *
  452.  * code
  453.  * MSG_SYSKEYUP
  454.  * int scancode = (int)wParam;
  455.  * DWORD key_flags = (DWORD)lParam;
  456.  * endcode
  457.  *
  458.  * param scancode The scan code of the released key.
  459.  * param key_flags The shift key status when this message occurred.
  460.  *
  461.  * sa MSG_SYSKEYDOWN, key_defs
  462.  */
  463. #define MSG_SYSKEYUP        0x0015
  464. /**
  465.  * def MSG_KEYSYM
  466.  * brief A key symbol translated from MSG_KEYDOWN messages.
  467.  *
  468.  * This message is translated from a MSG_KEYDOWN message by a TranslateMessage 
  469.  * and sent to the current active window.
  470.  *
  471.  * Note that one translation may generate a key symbol made by more than one character,
  472.  * e.g., when using default keymap, DEL key will generate the key symbol "^[[3~".
  473.  *
  474.  * code
  475.  * MSG_KEYSYM
  476.  * int index = HIBYTE (wParam);
  477.  * int keysym = LOBYTE (wParam);
  478.  * DWORD key_flags = (DWORD)lParam;
  479.  * endcode
  480.  *
  481.  * param index The index of the key symbol in one translation, zero for a new translation,
  482.  *              and the a keysym is the first symbol.
  483.  * param keysym The code of the key symbol.
  484.  * param key_flags The shift key status when this message occurred.
  485.  *
  486.  * sa MSG_SYSCHAR, TranslateMessage, key_defs
  487.  */
  488. #define MSG_KEYSYM  0x0016
  489. #define MSG_LASTKEYMSG      0x001F
  490.     /** @} end of key_msgs */
  491.     /**
  492.      * defgroup post_event_msgs Post mouse/key event messages
  493.      * @{
  494.      */
  495.     /* Group 3 from 0x0020 to 0x005F, the post mouse/key event messages. */
  496. #define MSG_FIRSTPOSTMSG    0x0020
  497. /**
  498.  * def MSG_SETCURSOR
  499.  * brief Sets cursor shape in the client area.
  500.  *
  501.  * This message is posted to the window under the cursor when the user moves
  502.  * the mouse in order to give the chance to change the cursor shape.
  503.  * The default handler set the cursor shape to the default cursor of the window.
  504.  * If you set a new cursor shape, your message handler should return immediately.
  505.  *
  506.  * code
  507.  * MSG_SETCURSOR
  508.  * int cx = LOSWORD (lParam);
  509.  * int cy = HISWORD (lParam);
  510.  * endcode
  511.  *
  512.  * param cx,cy The client coordinates of the cursor.
  513.  *
  514.  * Example:
  515.  *
  516.  * include setcursor.c
  517.  *
  518.  * sa MSG_NCSETCURSOR
  519.  */
  520. #define MSG_SETCURSOR       0x0020
  521.     #define HT_UNKNOWN          0x00
  522.     #define HT_OUT              0x01
  523.     #define HT_MENUBAR          0x02
  524.     #define HT_TRANSPARENT      0x03
  525.     #define HT_BORDER_TOP       0x04
  526.     #define HT_BORDER_BOTTOM    0x05
  527.     #define HT_BORDER_LEFT      0x06
  528.     #define HT_BORDER_RIGHT     0x07
  529.     #define HT_CORNER_TL        0x08
  530.     #define HT_CORNER_TR        0x09
  531.     #define HT_CORNER_BL        0x0A
  532.     #define HT_CORNER_BR        0x0B
  533.     #define HT_CLIENT           0x0C
  534.     #define HT_NEEDCAPTURE      0x10
  535.     #define HT_BORDER           0x11
  536.     #define HT_NCLIENT          0x12
  537.     #define HT_CAPTION          0x13
  538.     #define HT_ICON             0x14
  539.     #define HT_CLOSEBUTTON      0x15
  540.     #define HT_MAXBUTTON        0x16
  541.     #define HT_MINBUTTON        0x17
  542.     #define HT_HSCROLL          0x18
  543.     #define HT_VSCROLL          0x19
  544.     
  545.     #define SBPOS_LEFTARROW     0x81
  546.     #define SBPOS_RIGHTARROW    0x82
  547.     #define SBPOS_LEFTSPACE     0x83
  548.     #define SBPOS_RIGHTSPACE    0x84
  549.     #define SBPOS_UPARROW       0x85
  550.     #define SBPOS_DOWNARROW     0x86
  551.     #define SBPOS_UPSPACE       0x87
  552.     #define SBPOS_DOWNSPACE     0x88
  553.     #define SBPOS_THUMB         0x89
  554.     #define SBPOS_UNKNOWN       0x80
  555.     #define SBPOS_MASK          0x80
  556. #define MSG_NCHITTEST       0x0021      /* this is an async message. */
  557. #define MSG_HITTEST         MSG_NCHITTEST
  558. #define MSG_CHANGESIZE      0x0022
  559. #define MSG_QUERYNCRECT     0x0023
  560. #define MSG_QUERYCLIENTAREA 0x0024
  561. /**
  562.  * def MSG_SIZECHANGING
  563.  * brief Indicates the size of the window is being changed.
  564.  *
  565.  * This message is sent to the window when the size is being changed.
  566.  * If you want to control the actual position and size of the window when 
  567.  * the size is being changed (this may be caused by a MoveWindow or other functions), 
  568.  * you should handle this message, and return the actual
  569.  * position and size of the window through the second parameter.
  570.  *
  571.  * code
  572.  * MSG_SIZECHANGING
  573.  * const RECT* rcExpect = (const RECT*)wParam;
  574.  * RECT* rcResult = (RECT*)lParam;
  575.  * endcode
  576.  *
  577.  * param rcExpect The expected size of the window after changing.
  578.  * param rcResult The actual size of the window after changing.
  579.  *
  580.  * Example:
  581.  *
  582.  * include msg_sizechanging.c
  583.  */
  584. #define MSG_SIZECHANGING    0x0025
  585. /**
  586.  * def MSG_SIZECHANGED
  587.  * brief Indicates the size of the window has been changed.
  588.  *
  589.  * This message is sent to the window when the size has been changed.
  590.  * If you want adjust the size of the client area of the window, 
  591.  * you should handle this message, change the values of the client area,
  592.  * and return non-zero value to indicate that the client area has been modified.
  593.  *
  594.  * code
  595.  * MSG_SIZECHANGED
  596.  * RECT* rcClient = (RECT*)lParam;
  597.  * endcode
  598.  *
  599.  * param rcClient The pointer to a RECT structure which contains the new client area.
  600.  * 
  601.  * Example:
  602.  *
  603.  * include msg_sizechanged.c
  604.  */
  605. #define MSG_SIZECHANGED     0x0026
  606. /**
  607.  * def MSG_SETFOCUS
  608.  * brief Indicates that the window has gained the input focus.
  609.  *
  610.  * This message is sent to the window procedure 
  611.  * after the window gains the input focus.
  612.  */
  613. #define MSG_SETFOCUS        0x0030
  614. /**
  615.  * def MSG_KILLFOCUS
  616.  * brief Indicates that the window has lost the input focus.
  617.  *
  618.  * This message is sent to the window procedure 
  619.  * after the window lost the input focus.
  620.  */
  621. #define MSG_KILLFOCUS       0x0031
  622. /**
  623.  * def MSG_MOUSEACTIVE
  624.  * brief Indicates that the window has gained the input focus because
  625.  * the user clicked the window.
  626.  *
  627.  * This message is sent to the window procedure 
  628.  * after the user clicked the window and it has gained the input focus.
  629.  */
  630. #define MSG_MOUSEACTIVE     0x0032
  631. #define MSG_ACTIVE          0x0033
  632. #define MSG_CHILDHIDDEN     0x0034
  633.     #define RCTM_CLICK          1
  634.     #define RCTM_KEY            2
  635.     #define RCTM_MESSAGE        3
  636.     #define RCTM_SHOWCTRL       4
  637. /**
  638.  * def MSG_ACTIVEMENU
  639.  * brief Indicates that the user activates the menu bar and tracks it.
  640.  *
  641.  * This message is sent to the window procedure when the user
  642.  * activates the menu bar and tracks it.
  643.  *
  644.  * If you want to change the states of menu items in the submenu 
  645.  * before displaying it, you can handle this message.
  646.  *
  647.  * code
  648.  * MSG_ACTIVEMENU
  649.  * int pos = (int)wParam;
  650.  * HMENU submenu = (HMENU)lParam;
  651.  * endcode
  652.  * 
  653.  * param pos The position of the activated submenu. The position value of the 
  654.  *      first submenu is 0.
  655.  * param submenu The handle to the activated submenu.
  656.  *
  657.  * Example:
  658.  *
  659.  * include activemenu.c
  660.  */
  661. #define MSG_ACTIVEMENU      0x0040
  662. /**
  663.  * def MSG_DEACTIVEMENU
  664.  * brief Indicates the end of the tracking of a menu bar or a popup menu.
  665.  *
  666.  * This message is sent to the window procedure when the user has
  667.  * closed the tracking menu bar or popup menu.
  668.  *
  669.  * code
  670.  * MSG_DEACTIVEMENU
  671.  * HMENU menubar = (HMENU)wParam;
  672.  * HMENU submenu = (HMENU)lParam;
  673.  * endcode
  674.  *
  675.  * param menubar The handle to the menu bar. It will be zero when the deactivated
  676.  *        menu is a popup menu.
  677.  * param submenu The handle to the submenu.
  678.  */
  679. #define MSG_DEACTIVEMENU    0x0041
  680.     /* Scroll bar notifying code */
  681.     #define SB_LINEUP           0x01
  682.     #define SB_LINEDOWN         0x02
  683.     #define SB_LINELEFT         0x03
  684.     #define SB_LINERIGHT        0x04
  685.     #define SB_PAGEUP           0x05
  686.     #define SB_PAGEDOWN         0x06
  687.     #define SB_PAGELEFT         0x07
  688.     #define SB_PAGERIGHT        0x08
  689.     #define SB_THUMBPOSITION    0x09
  690.     #define SB_THUMBTRACK       0x0A
  691.     #define SB_ENDSCROLL        0x0B
  692.     
  693. /**
  694.  * def MSG_HSCROLL
  695.  * brief Indicates that the user has clicked the horizontal scroll bar.
  696.  *
  697.  * This message is sent to the window procedure when the user has clicked
  698.  * the horizontal scroll bar and changed the position of the thumb.
  699.  *
  700.  * code
  701.  * MSG_HSCROLL
  702.  * int hs_nc = (int)wParam;
  703.  * endcode
  704.  *
  705.  * param hs_nc The scrolling code, can be one of the following values:
  706.  *      - SB_LINELEFTn
  707.  *        The user clicked the left arrow on the bar.
  708.  *      - SB_LINERIGHTn
  709.  *        The user clicked the right arrow on the bar.
  710.  *      - SB_PAGELEFTn
  711.  *        The user clicked the left page area on the bar.
  712.  *      - SB_PAGERIGHTn
  713.  *        The user clicked the right page area on the bar.
  714.  *      - SB_THUMBPOSITIONn
  715.  *        The user set a new thumb position.
  716.  *      - SB_THUMBTRACKn
  717.  *        The user is draging and tracking the thumb.
  718.  *      - SB_ENDSCROLLn
  719.  *        The end of scrolling.
  720.  */
  721. #define MSG_HSCROLL         0x0042
  722. /**
  723.  * def MSG_VSCROLL
  724.  * brief Indicates that the user has clicked the vertical scroll bar.
  725.  *
  726.  * This message is sent to the window procedure when the user has clicked
  727.  * the vertical scroll bar and changed the position of the thumb.
  728.  *
  729.  * code
  730.  * MSG_HSCROLL
  731.  * int vs_nc = (int)wParam;
  732.  * endcode
  733.  *
  734.  * param vs_nc The scrolling code, can be one of the following values:
  735.  *      - SB_LINEUPn
  736.  *        The user clicked the up arrow on the bar.
  737.  *      - SB_LINEDOWNn
  738.  *        The user clicked the down arrow on the bar.
  739.  *      - SB_PAGEUPn
  740.  *        The user clicked the up page area on the bar.
  741.  *      - SB_PAGEDOWNn
  742.  *        The user clicked the down page area on the bar.
  743.  *      - SB_THUMBPOSITIONn
  744.  *        The user set a new thumb position.
  745.  *      - SB_THUMBTRACKn
  746.  *        The user is draging and tracking the thumb.
  747.  *      - SB_ENDSCROLLn
  748.  *        The end of scrolling.
  749.  */
  750. #define MSG_VSCROLL         0x0043
  751. #define MSG_NCSETCURSOR     0x0044
  752. /**
  753.  * def MSG_MOUSEMOVEIN
  754.  * brief Indicates the mouse is moved in/out the area of the window.
  755.  *
  756.  * This message is posted to the window when the user moves the mouse
  757.  * in/out the area of the window.
  758.  *
  759.  * code
  760.  * MSG_MOUSEMOVEIN
  761.  * BOOL in_out = (BOOL)wParam;
  762.  * endcode
  763.  *
  764.  * param in_out Indicates whether the mouse has been moved in the window
  765.  *      or out the window.
  766.  */
  767. #define MSG_MOUSEMOVEIN     0x0050
  768. #define MSG_LASTPOSTMSG     0x005F
  769.     /** @} end of post_event_msgs */
  770.     /**
  771.      * defgroup creation_msgs Window creation messages
  772.      * @{
  773.      */
  774.     /* Group 4 from 0x0060 to 0x009F, the creation messages. */
  775. #define MSG_FIRSTCREATEMSG  0x0060
  776. /**
  777.  * def MSG_CREATE
  778.  * brief Indicates the window has been created, and gives you a chance to initialize your private objects.
  779.  *
  780.  * This messages is sent to the window after the window has been created and registered
  781.  * to the system. You can initialize your own objects when you receive this message, 
  782.  * and return zero to the system in order to indicates the success of initialization.
  783.  * If you return non-zero to the system after handled this message, the created window
  784.  * will be destroied immediately.
  785.  *
  786.  * code
  787.  * MSG_CREATE for main windows:
  788.  * PMAINWINCREATE create_info = (PMAINWINCREATE)lParam;
  789.  *
  790.  * MSG_CREATE for controls:
  791.  * HWND parent = (HWND)wParam;
  792.  * DWORD add_data = (DWORD)lParam;
  793.  * endcode
  794.  *
  795.  * param create_info The pointer to the MAINWINCREATE structure which is passed to
  796.  *        CreateMainWindow function.
  797.  * param parent The handle to the parent window of the control.
  798.  * param add_data The first additional data passed to CreateWindow function.
  799.  *
  800.  * sa CreateMainWindow, CreateWindow, MAINWINCREATE
  801.  */
  802. #define MSG_CREATE          0x0060
  803. /**
  804.  * def MSG_NCCREATE
  805.  * brief Indicates the window has been created, but has not registered to the system.
  806.  *
  807.  * This message is sent to the window after the window has been created, but not
  808.  * registered the system. Like MSG_CREATE message, you can initialize your own objects
  809.  * when you receive this message, but can not create child windows of the window, and 
  810.  * can not get a device context to draw.
  811.  *
  812.  * If you return non-zero to the system after handled this message, the created window
  813.  * will be destroied immediately.
  814.  *
  815.  * code
  816.  * MSG_NCCREATE for main windows:
  817.  * PMAINWINCREATE create_info = (PMAINWINCREATE)lParam;
  818.  *
  819.  * MSG_NCCREATE for controls:
  820.  * DWORD add_data = (DWORD)lParam;
  821.  * endcode
  822.  *
  823.  * param create_info The pointer to the MAINWINCREATE structure which is passed to
  824.  *        CreateMainWindow function.
  825.  * param add_data The first additional data passed to CreateWindow function.
  826.  *
  827.  * sa CreateMainWindow, CreateWindow, MAINWINCREATE
  828.  */
  829. #define MSG_NCCREATE        0x0061
  830. #define MSG_INITPANES       0x0062
  831. #define MSG_DESTROYPANES    0x0063
  832. /**
  833.  * def MSG_DESTROY
  834.  * brief Indicates the window will be destroied.
  835.  *
  836.  * This message is sent to the window when a DestroyMainWindow 
  837.  * or a DestroyWindow is calling. You can destroy your private objects
  838.  * when receiving this message.
  839.  *
  840.  * If you return non-zero to the system after handle this message, the process 
  841.  * of a DestroyMainWindow and a DestroyWindow will return immediately.
  842.  *
  843.  * sa DestroyMainWindow, DestroyWindow
  844.  */
  845. #define MSG_DESTROY         0x0064
  846. #define MSG_NCDESTROY       0x0065
  847. /**
  848.  * def MSG_CLOSE
  849.  * brief Indicates the user has clicked the closing box on the caption.
  850.  *
  851.  * This message is sent to the window when the user has clicked the closing box
  852.  * on the caption of the window.
  853.  */
  854. #define MSG_CLOSE           0x0066
  855. #define MSG_NCCALCSIZE      0x0067
  856. /**
  857.  * def MSG_MAXIMIZE
  858.  * brief Indicates the user has clicked the maximizing box on the caption.
  859.  *
  860.  * This message is sent to the window when the user has clicked the maximizing box
  861.  * on the caption of the window.
  862.  */
  863. #define MSG_MAXIMIZE 0x0068
  864. /**
  865.  * def MSG_MINIMIZE
  866.  * brief Indicates the user has clicked the minimizing box on the caption.
  867.  *
  868.  * This message is sent to the window when the user has clicked the minimizing box
  869.  * on the caption of the window.
  870.  */
  871. #define MSG_MINIMIZE 0x0069
  872. #define MSG_LASTCREATEMSG   0x009F
  873.     /** @} end of creation_msgs */
  874.     /**
  875.      * defgroup paint_msgs Window painting messages
  876.      * @{
  877.      */
  878.     /* Group 5 from 0x00A0 to 0x00CF, the paint messages. */
  879. #define MSG_FIRSTPAINTMSG   0x00A0
  880. /**
  881.  * def MSG_SHOWWINDOW
  882.  * brief Indicates that the window has been shown or hidden.
  883.  *
  884.  * This message is sent to the window when the window has been shown
  885.  * or hidden (due to the calling of the function ShowWindow).
  886.  *
  887.  * code
  888.  * MSG_SHOWWINDOW
  889.  * int show_cmd = (int)wParam;
  890.  * endcode
  891.  *
  892.  * param show_cmd The command to show or hide, can be one of 
  893.  * the following values:
  894.  *      - SW_SHOWn
  895.  *        Shows the window.
  896.  *      - SW_HIDEn
  897.  *        Hides the window.
  898.  *      - SW_SHOWNORMALn
  899.  *        Shows the window, and if the window is a main window 
  900.  *        sets it to be the topmost main window.
  901.  *
  902.  * sa ShowWindow
  903.  */
  904. #define MSG_SHOWWINDOW      0x00A0 
  905. /**
  906.  * def MSG_ERASEBKGND
  907.  * brief Sent to the window to erase the background.
  908.  *
  909.  * This message is sent to the window if the whole or a part of the background
  910.  * should be erased.
  911.  *
  912.  * code
  913.  * MSG_ERASEBKGND
  914.  * const RECT* inv_rect = (const RECT*)lParam;
  915.  * endcode
  916.  *
  917.  * param inv_rect The pointer to a RECT structure contains the rectangle
  918.  *        should be erase. The rectangle is in client coordinates system. 
  919.  *        If it is NULL, the whole client area should be erased.
  920.  */
  921. #define MSG_ERASEBKGND      0x00B0      /* this is an async message. */
  922. /**
  923.  * def MSG_PAINT
  924.  * brief Sent to the window if the window contains an invalid region.
  925.  *
  926.  * This message is sent to the window if the window contains an invalid region.
  927.  *
  928.  * code
  929.  * MSG_PAINT
  930.  * const CLIPRGN* inv_rgn = (const CLIPRGN*) lParam;
  931.  * endcode
  932.  *
  933.  * param inv_rgn The pointer to the invalid region of the window.
  934.  */
  935. #define MSG_PAINT           0x00B1
  936. #define MSG_NCPAINT         0x00B2
  937. #define MSG_NCACTIVATE      0x00B3
  938. #define MSG_SYNCPAINT       0x00B4
  939. #define MSG_LASTPAINTMSG    0x00CF
  940.     /** @} end of paint_msgs */
  941.     /**
  942.      * defgroup desktop_msgs Internal desktop messages
  943.      * @{
  944.      */
  945.     /* Group 6 from 0x00D0 to 0x00EF, the internal desktop messages. */
  946. #define MSG_FIRSTSESSIONMSG 0x00D0
  947. #define MSG_STARTSESSION    0x00D0
  948. #define MSG_QUERYENDSESSION 0x00D1
  949. #define MSG_ENDSESSION      0x00D2
  950. #define MSG_REINITSESSION   0x00D3
  951. #if defined(_LITE_VERSION) && !defined(_STAND_ALONE)
  952.   #define MSG_NEWCLIENT       0x00D4
  953.   #define MSG_DELCLIENT       0x00D5
  954.   #define MSG_TOPMOSTCHANGED  0x00D6
  955. #endif /* _LITE_VERSION && !_STAND_ALONE */
  956. #define MSG_ERASEDESKTOP    0x00E0
  957. #define MSG_PAINTDESKTOP    0x00E1
  958. #define MSG_DT_MOUSEOFF     0x00E1
  959. #define MSG_DT_LBUTTONDOWN  0x00E2
  960. #define MSG_DT_LBUTTONUP    0x00E3
  961. #define MSG_DT_LBUTTONDBLCLK    0x00E4
  962. #define MSG_DT_MOUSEMOVE    0x00E5
  963. #define MSG_DT_RBUTTONDOWN  0x00E6
  964. #define MSG_DT_RBUTTONUP    0x00E7
  965. #define MSG_DT_RBUTTONDBLCLK    0x00E8
  966. #define MSG_DT_KEYOFF       0x00DA 
  967. #define MSG_DT_KEYDOWN      0x00EA
  968. #define MSG_DT_CHAR         0x00EB
  969. #define MSG_DT_KEYUP        0x00EC
  970. #define MSG_DT_SYSKEYDOWN   0x00ED
  971. #define MSG_DT_SYSCHAR      0x00EE
  972. #define MSG_DT_SYSKEYUP     0x00EF
  973. #define MSG_LASTSESSIONMSG  0x00EF
  974.     /** @} end of desktop_msgs */
  975.     /**
  976.      * defgroup window_msgs Internal window management messages
  977.      * @{
  978.      */
  979.     /* Group 7 from 0x00F0 to 0x010F, Internal window management messages. */
  980. #define MSG_FIRSTWINDOWMSG  0x00F0
  981. #define MSG_ADDNEWMAINWIN   0x00F0
  982. #define MSG_REMOVEMAINWIN   0x00F1
  983. #define MSG_MOVETOTOPMOST   0x00F2 
  984. #define MSG_SETACTIVEMAIN   0x00F3
  985. #define MSG_GETACTIVEMAIN   0x00F4
  986. #define MSG_SHOWMAINWIN     0x00F5
  987. #define MSG_HIDEMAINWIN     0x00F6
  988. #define MSG_MOVEMAINWIN     0x00F7
  989. #define MSG_SETCAPTURE      0x00F8
  990. #define MSG_GETCAPTURE      0x00F9
  991. #define MSG_ENDTRACKMENU    0x00FA
  992. #define MSG_TRACKPOPUPMENU  0x00FB
  993. #define MSG_CLOSEMENU       0x00FC
  994. #define MSG_SCROLLMAINWIN   0x00FD
  995. #define MSG_CARET_CREATE    0x00FE
  996. #define MSG_CARET_DESTROY   0x00FF
  997. #define MSG_ENABLEMAINWIN   0x0100
  998. #define MSG_ISENABLED       0x0101
  999. #define MSG_SETWINCURSOR    0x0102
  1000. #define MSG_GETNEXTMAINWIN  0x0103
  1001. #define MSG_SHOWGLOBALCTRL  0x010A
  1002. #define MSG_HIDEGLOBALCTRL  0x010B
  1003. #define MSG_LASTWINDOWMSG   0x010F
  1004.     /** @} end of window_msgs */
  1005.     /**
  1006.      * defgroup ctrl_msgs Dialog and control messages
  1007.      * @{
  1008.      */
  1009.     /* Group 8 from 0x0120 to 0x013F, the dialog and control messages. */
  1010. #define MSG_FIRSTCONTROLMSG 0x0120
  1011. /**
  1012.  * def MSG_COMMAND
  1013.  * brief The command message, indicates a notification message from child window,
  1014.  *        or the user has selected a menu item.
  1015.  *
  1016.  * This message sent to the window when the user has selected a menu item, or
  1017.  * a child window has sent a notification message to the parent.
  1018.  *
  1019.  * code
  1020.  * MSG_COMMAND
  1021.  * int id = LOWORD(wParam);
  1022.  * int code = HIWORD(wParam);
  1023.  * HWND hwnd = (HWND)lParam;
  1024.  * endcode
  1025.  *
  1026.  * param id The identifier of the menu item or the child window.
  1027.  * param code The notification code.
  1028.  * param hwnd The handle to the control.
  1029.  *
  1030.  * sa NotifyParent
  1031.  */
  1032. #define MSG_COMMAND         0x0120
  1033. #define MSG_SYSCOMMAND      0x0121
  1034. #define MSG_GETDLGCODE      0x0122
  1035. /**
  1036.  * def MSG_INITDIALOG
  1037.  * brief Ready to initialize the controls in a dialog box.
  1038.  *
  1039.  * This message is sent to the dialog in order that you can initialize the controls
  1040.  * in the dialog box.
  1041.  *
  1042.  * code
  1043.  * MSG_INITDIALOG
  1044.  * HWND focus_hwnd = (HWND)wParam;
  1045.  * LPARAM lparam = (LPARAM)lParam;
  1046.  * endcode
  1047.  *
  1048.  * param focus_hwnd The handle to the control which will gain the input focus.
  1049.  * param lparam The parameter passed into the dialog box 
  1050.  *        through a DialogBoxIndirectParam function.
  1051.  * return Returns non-zero value to set the input focus to a focus_hwnd, else do not set focus.
  1052.  *
  1053.  * sa DialogBoxIndirectParam
  1054.  *
  1055.  * Example:
  1056.  *
  1057.  * include msg_initdialog.c
  1058.  */
  1059. #define MSG_INITDIALOG      0x0123
  1060. #define MSG_NEXTDLGCTRL     0x0124
  1061. #define MSG_ENTERIDLE       0x0125
  1062. #define MSG_DLG_GETDEFID    0x0126
  1063. #define MSG_DLG_SETDEFID    0x0127
  1064. #define MSG_DLG_REPOSITION  0x0128
  1065. /**
  1066.  * def MSG_INITPAGE
  1067.  * brief Ready to initialize the controls in a property page.
  1068.  *
  1069.  * This message is sent to the page in order that you can initialize the controls
  1070.  * in the page.
  1071.  *
  1072.  * code
  1073.  * MSG_INITPAGE
  1074.  * DWORD add_data = (DWORD)lParam;
  1075.  * endcode
  1076.  *
  1077.  * param add_data The additional data in DLGTEMPLATE structure passed 
  1078.  *        through PSM_ADDPAGE message.
  1079.  *
  1080.  * sa ctrl_propsheet
  1081.  */
  1082. #define MSG_INITPAGE        0x0129
  1083. /**
  1084.  * def MSG_SHOWPAGE
  1085.  * brief Indicates the page will be shown or hidden.
  1086.  *
  1087.  * This message is sent to the page when the page will be shown or hidden.
  1088.  *
  1089.  * code
  1090.  * MSG_SHOWPAGE
  1091.  * HWND focus_hwnd = (HWND)wParam;
  1092.  * int show_cmd = (int)lParam;
  1093.  * endcode
  1094.  *
  1095.  * param focus_hwnd The handle to the child which will gain the input focus 
  1096.  *        if showing the page.
  1097.  * param show_cmd The show command, can be one of the following values:
  1098.  *      - SW_SHOWn The page will be shown.
  1099.  *      - SW_HIDEn The page will be hidden.
  1100.  *
  1101.  * sa ctrl_propsheet
  1102.  */
  1103. #define MSG_SHOWPAGE        0x012A
  1104. /**
  1105.  * def MSG_SHEETCMD
  1106.  * brief Indicates that a PSM_SHEETCMD message had been sent to the PropertySheet 
  1107.  * control.
  1108.  *
  1109.  * This message is sent to the property page when the property sheet contains the page
  1110.  * received the PSM_SHEETCMD message.
  1111.  *
  1112.  * code
  1113.  * MSG_SHEETCMD
  1114.  * WPARAM param1 = wParam;
  1115.  * LPARAM param2 = lParam;
  1116.  * endcode
  1117.  *
  1118.  * param param1 The wParam of PSM_SHEETCMD message.
  1119.  * param param2 The lParam of PSM_SHEETCMD message.
  1120.  *
  1121.  * sa ctrl_propsheet, PSM_SHEETCMD
  1122.  */
  1123. #define MSG_SHEETCMD        0x012B
  1124. /**
  1125.  * def MSG_INITCONTAINER
  1126.  * brief This message will be sent to the container window procedure after
  1127.  * the container window is created.
  1128.  *
  1129.  * This message is sent to the container in order that you can initialize the controls
  1130.  * in the container.
  1131.  *
  1132.  * code
  1133.  * MSG_INITCONTAINER
  1134.  * DWORD add_data = (DWORD)lParam;
  1135.  * endcode
  1136.  *
  1137.  * param add_data The additional data in CONTAINERINFO structure passed 
  1138.  *        through the argument of dwAddData when creating the ScrollView control
  1139.  *        by calling CreateWindowEx.
  1140.  *
  1141.  * sa ctrl_scrollview, CONTAINERINFO
  1142.  */
  1143. #define MSG_INITCONTAINER   0x012C
  1144. /**
  1145.  * def MSG_SVCONTCMD
  1146.  * brief This message will be sent to the parent of the ScrollView control when
  1147.  * the container of the ScrollView control reveived a MSG_COMMAND message.
  1148.  *
  1149.  * This message will be sent to the parent of the ScrollView when
  1150.  * the container of the ScrollView control reveived a MSG_COMMAND message.
  1151.  * Generally, the notification of the child control in the container will be
  1152.  * sent via MSG_COMMAND to the container. If you have not defined your own
  1153.  * window procedure for the container, this message gives a chance for the parent
  1154.  * of the ScrollView control to handle the notifications come from the controls
  1155.  * in the container.
  1156.  *
  1157.  * Note that you can also define user window procedure for the container, and
  1158.  * handle the notification from the child control in this procedure.
  1159.  *
  1160.  * code
  1161.  * MSG_SVCONTCMD
  1162.  * WPARAM param1 = wParam;
  1163.  * WPARAM param2 = lParam;
  1164.  * endcode
  1165.  *
  1166.  * param param1 The wParam of MSG_COMMAND message.
  1167.  * param param2 The lParam of MSG_COMMAND message.
  1168.  *
  1169.  * sa ctrl_scrollview, MSG_COMMAND
  1170.  */
  1171. #define MSG_SVCONTCMD       0x012D
  1172. /**
  1173.  * def MSG_FREEZECTRL
  1174.  * brief You can send this message to freeze or thaw the paint action of the control.
  1175.  *
  1176.  * note implemented only in scrollview and listview.
  1177.  *
  1178.  * code
  1179.  * MSG_FREEZECTRL
  1180.  * BOOL bFrozen;
  1181.  *
  1182.  * wParam = bFrozen
  1183.  * lParam = 0;
  1184.  *
  1185.  * endcode
  1186.  *
  1187.  * param bFrozen to freeze or to thaw.
  1188.  *
  1189.  * return zero.
  1190.  */
  1191. #define MSG_FREEZECTRL      0x012E
  1192. /**
  1193.  * def MSG_FONTCHANGING
  1194.  * brief Indicates the user is trying to change the font of the window.
  1195.  *
  1196.  * This message is sent to the window when the user is trying to change
  1197.  * the font of the window by calling a SetWindowFont.
  1198.  * If you return non-zero after handling this message, a SetWindowFont
  1199.  * will return immediately, i.e., the default window font will not change.
  1200.  *
  1201.  * code
  1202.  * MSG_FONTCHANGING
  1203.  * PLOGFONT log_font = (PLOGFONT)lParam;
  1204.  * endcode
  1205.  *
  1206.  * param log_font The pointer to the new window logical font.
  1207.  *
  1208.  * sa SetWindowFont
  1209.  */
  1210. #define MSG_FONTCHANGING    0x0130
  1211. /**
  1212.  * def MSG_FONTCHANGED
  1213.  * brief Indicates the window font has been changed.
  1214.  *
  1215.  * This message is sent to the window after the window font has changed.
  1216.  * Some window should be repainted to reflect the new window font.
  1217.  */
  1218. #define MSG_FONTCHANGED     0x0131
  1219. /**
  1220.  * def MSG_GETTEXTLENGTH
  1221.  * brief Sent to the control to get the length of the text.
  1222.  *
  1223.  * This message is sent to the control when you calling a GetWindowTextLength
  1224.  * function to get the lenght of the text.
  1225.  *
  1226.  * code
  1227.  * MSG_GETTEXTLENGTH
  1228.  * wParam = 0;
  1229.  * lParam = 0;
  1230.  * endcode
  1231.  *
  1232.  * return The length of the text.
  1233.  *
  1234.  * sa GetWindowTextLength
  1235.  */
  1236. #define MSG_GETTEXTLENGTH   0x0132
  1237. /**
  1238.  * def MSG_GETTEXT
  1239.  * brief Sent to the control to get the text.
  1240.  *
  1241.  * This message is sent to the control when you calling a GetWindowText
  1242.  * function to get the text.
  1243.  *
  1244.  * code
  1245.  * MSG_GETTEXT
  1246.  * int max_len;
  1247.  * char* text_buf;
  1248.  *
  1249.  * wParam = (WPARAM)max_len;
  1250.  * lParam = (LPARAM)text_buf;
  1251.  * endcode
  1252.  *
  1253.  * param max_len The maximal number of characters can be copied to the buffer.
  1254.  * param text_buf The pointer to a buffer receives the text.
  1255.  * return The length of the window text string.
  1256.  *
  1257.  * sa GetWindowText
  1258.  */
  1259. #define MSG_GETTEXT         0x0133
  1260. /**
  1261.  * def MSG_SETTEXT
  1262.  * brief Sent to the control to set the text.
  1263.  *
  1264.  * This message is sent to the control when you calling a SetWindowText
  1265.  * function to set the text.
  1266.  *
  1267.  * code
  1268.  * MSG_GETTEXT
  1269.  * char* text_buf;
  1270.  *
  1271.  * wParam = 0;
  1272.  * lParam = (LPARAM)text_buf;
  1273.  * endcode
  1274.  *
  1275.  * param text_buf The pointer to a buffer contains the text.
  1276.  * return The length of the text string.
  1277.  *
  1278.  * sa SetWindowText
  1279.  */
  1280. #define MSG_SETTEXT         0x0134
  1281. /**
  1282.  * def MSG_ENABLE
  1283.  * brief Indicates the window is disabled/enabled.
  1284.  *
  1285.  * This message is sent to the window if the window has been disabled or enabled.
  1286.  *
  1287.  * code
  1288.  * MSG_ENABLE
  1289.  * BOOL enabled = (BOOL)wParam;
  1290.  * endcode
  1291.  *
  1292.  * param enabled Indicates whether the window was disabled or enabled.
  1293.  */
  1294. #define MSG_ENABLE          0x0135
  1295. #define MSG_LASTCONTROLMSG  0x013F
  1296.     /** @} end of ctrl_msgs */
  1297.     /**
  1298.      * defgroup system_msgs System messages
  1299.      * @{
  1300.      */
  1301.     /* Group 9 from 0x0140 to 0x016F, the system messages. */
  1302. #define MSG_FIRSTSYSTEMMSG  0x0140
  1303. #define MSG_QUIT            0x0140
  1304. /**
  1305.  * def MSG_IDLE
  1306.  * brief Indicates the system enters idle loop.
  1307.  *
  1308.  * This message is sent to the all main window when the system
  1309.  * enters idle loop.
  1310.  */
  1311. #define MSG_IDLE            0x0142
  1312. #define MSG_TIMEOUT         0x0143
  1313. /**
  1314.  * def MSG_TIMER
  1315.  * brief Indicates a timer has expired.
  1316.  *
  1317.  * This message is sent to the window when a timer expired.
  1318.  *
  1319.  * code
  1320.  * MSG_TIMER
  1321.  * int timer_id = (int)wParam;
  1322.  * endcode
  1323.  *
  1324.  * param timer_id The identifier of the timer has expired.
  1325.  */
  1326. #define MSG_TIMER           0x0144
  1327. #define MSG_CARETBLINK      0x0145
  1328. #ifdef _LITE_VERSION
  1329. /**
  1330.  * def MSG_FDEVENT
  1331.  * brief Indicates an event of registered file descriptor occurred.
  1332.  *
  1333.  * You can use a RegisterListenFD to register a file desciptor to 
  1334.  * MiniGUI-Lite for listening.
  1335.  *
  1336.  * When there is a read/write/except event on the fd, MiniGUI
  1337.  * will post a MSG_FDEVENT message with wParam being equal to
  1338.  * MAKELONG (fd, type), and the lParam being set to be the context
  1339.  * to the target window.
  1340.  *
  1341.  * code
  1342.  * MSG_FDEVENT
  1343.  * int fd = LOWORD(wParam);
  1344.  * int type = HIWORD(wParam);
  1345.  * void* context = (void*)lParam;
  1346.  * endcode
  1347.  *
  1348.  * param fd The listened file descriptor.
  1349.  * param type The event type.
  1350.  * param context A context value.
  1351.  *
  1352.  * note Only available on MiniGUI-Lite.
  1353.  *
  1354.  * sa RegisterListenFD
  1355.  */
  1356. #define MSG_FDEVENT         0x0146
  1357. /**
  1358.  * def MSG_SRVNOTIFY
  1359.  * brief Indicates a notification from the server of MiniGUI-Lite.
  1360.  *
  1361.  * This message will be broadcasted to all of the main window 
  1362.  * in a client process when the client receives a MSG_SRVNOTIFY message
  1363.  * from the server.
  1364.  *
  1365.  * The server, i.e. 'mginit' defines the meaning of two parameters of this message.
  1366.  *
  1367.  * note Only available on MiniGUI-Lite.
  1368.  */
  1369. #define MSG_SRVNOTIFY       0x0147
  1370. #define MSG_UNEXPOSECLIENT  0x0148
  1371. #define MSG_ACTIVECLIENT    0x0149
  1372. #endif
  1373. /**
  1374.  * def MSG_DOESNEEDIME
  1375.  * brief Sends to a window to query whether the window needs to open IME window.
  1376.  *
  1377.  * The system will send this message when the window gain the input focus
  1378.  * to determine whether the window needs to open IME window.
  1379.  *
  1380.  * The application should handle this message and return TRUE when
  1381.  * the window need IME window. 
  1382.  * Default window procedure returns FALSE.
  1383.  *
  1384.  * note This is a asynchronical message.
  1385.  */
  1386. #define MSG_DOESNEEDIME     0x0150
  1387. #define MSG_IME_REGISTER    0x0151
  1388. #define MSG_IME_UNREGISTER  0x0152
  1389. #define MSG_IME_OPEN        0x0153
  1390. #define MSG_IME_CLOSE       0x0154
  1391. #define MSG_IME_SETSTATUS   0x0156
  1392. #define MSG_IME_GETSTATUS   0x0157
  1393.     #define IS_ENABLE       1
  1394.     #define IS_FULLCHAR     2
  1395.     #define IS_FULLPUNC     3
  1396.     #define IS_METHOD       4
  1397. #define MSG_IME_SETTARGET   0x0158
  1398. #define MSG_IME_GETTARGET   0x0159
  1399. #define MSG_SHOWMENU        0x0160
  1400. #define MSG_HIDEMENU        0x0161
  1401. #define MSG_ADDTIMER        0x0162
  1402. #define MSG_REMOVETIMER     0x0163
  1403. #define MSG_RESETTIMER      0x0164
  1404. #define MSG_WINDOWCHANGED   0x0165
  1405. #define MSG_BROADCASTMSG    0x0166
  1406. #define MSG_REGISTERWNDCLASS    0x0167
  1407. #define MSG_UNREGISTERWNDCLASS  0x0168
  1408. #define MSG_NEWCTRLINSTANCE     0x0169
  1409. #define MSG_REMOVECTRLINSTANCE  0x016A
  1410. #define MSG_GETCTRLCLASSINFO    0x016B
  1411. #define MSG_CTRLCLASSDATAOP     0x016C
  1412.     #define CCDOP_GETCCI        0x01
  1413.     #define CCDOP_SETCCI        0x02
  1414. #define MSG_REGISTERKEYHOOK     0x016D
  1415. #define MSG_REGISTERMOUSEHOOK   0x016E
  1416. #define MSG_LASTSYSTEMMSG   0x016F
  1417.     /** @} end of system_msgs */
  1418.     /**
  1419.      * defgroup menu_msgs Internal menu messages
  1420.      * @{
  1421.      */
  1422.     /* Group 10 from 0x0170 to 0x018F, the menu messages */
  1423. #define MSG_FIRSTMENUMSG    0x0170
  1424. #define MSG_INITMENU        0x0170
  1425. #define MSG_INITMENUPOPUP   0x0171
  1426. #define MSG_MENUSELECT      0x0172
  1427. #define MSG_MENUCHAR        0x0173
  1428. #define MSG_ENTERMENULOOP   0x0174
  1429. #define MSG_EXITMENULOOP    0x0175
  1430. #define MSG_CONTEXTMENU     0x0176
  1431. #define MSG_NEXTMENU        0x0177
  1432. #define MSG_LASTMENUMSG     0x018F
  1433.     /** @} end of menu_msgs */
  1434.     /**
  1435.      * defgroup user_msgs User-defined  messages
  1436.      * @{
  1437.      */
  1438. #define MSG_FIRSTUSERMSG    0x0800
  1439. /**
  1440.  * def MSG_USER
  1441.  * brief The first user-defined message.
  1442.  *
  1443.  * MiniGUI reserved the range from 0x0800 to 0xEFFF for user-defined messages.
  1444.  * MSG_USER is the first user-defined message you can use it by your own.
  1445.  */
  1446. #define MSG_USER            0x0800
  1447. #define MSG_LASTUSERMSG     0xEFFF
  1448.     /** @} end of user_msgs */
  1449.     /** @} end of msgs */
  1450.     /**
  1451.      * addtogroup fns Functions
  1452.      * @{
  1453.      */
  1454.     /**
  1455.      * defgroup msg_fns Message functions
  1456.      * @{
  1457.      */
  1458.     /**
  1459.      * defgroup msg_pass_fns Message passing functions
  1460.      * @{
  1461.      */
  1462. /**
  1463.  * The message structure.
  1464.  * sa GetMessage, PostMessage, msgs
  1465.  */
  1466. typedef struct _MSG
  1467. {
  1468. /** the handle to the window which receives this message. */
  1469.     HWND             hwnd;
  1470. /** the message identifier. */
  1471.     int              message;
  1472.     /** The first parameter of the message (32-bit integer). */
  1473.     WPARAM           wParam;
  1474.     /** The second parameter of the message (32-bit integer). */
  1475.     LPARAM           lParam;
  1476.     unsigned int     time;
  1477. #ifndef _LITE_VERSION
  1478.     void*            pAdd;
  1479. #endif
  1480. } MSG;
  1481. typedef MSG* PMSG;
  1482. #define QS_NOTIFYMSG        0x10000000
  1483. #ifndef _LITE_VERSION
  1484.   #define QS_SYNCMSG        0x20000000
  1485. #else
  1486.   #define QS_DESKTIMER      0x20000000
  1487. #endif
  1488. #define QS_POSTMSG          0x40000000
  1489. #define QS_QUIT             0x80000000
  1490. #define QS_INPUT            0x01000000
  1491. #define QS_PAINT            0x02000000
  1492. #define QS_TIMER            0x0000FFFF
  1493. #define QS_EMPTY            0x00000000
  1494. /**
  1495.  * fn int GetMessage (PMSG pMsg, HWND hMainWnd)
  1496.  * brief Gets a message from the message queue of a main window.
  1497.  *
  1498.  * This function gets a message from the message queue of the main window a hMainWnd,
  1499.  * and returns until there is a message in the message queue.
  1500.  *
  1501.  * param pMsg Pointer to the result message.
  1502.  * param hMainWnd Handle to the window.
  1503.  * return 0 on MSG_QUIT have been found, else gets a message.
  1504.  *
  1505.  * sa HavePendingMessage, PostQuitMesasge, MSG
  1506.  *
  1507.  * Example:
  1508.  *
  1509.  * include getmessage.c
  1510.  */
  1511. int GUIAPI GetMessage (PMSG pMsg, HWND hMainWnd);
  1512. /**
  1513.  * fn BOOL HavePendingMessage (HWND hMainWnd)
  1514.  * brief Checks if there is any pending message in the message queue of a main window.
  1515.  *
  1516.  * This function checks whether there is any pending message in the
  1517.  * message queue of the main window a hMainWnd.
  1518.  *
  1519.  * param hMainWnd The handle to the main window.
  1520.  * return TRUE for pending message, FALSE for empty message queue.
  1521.  *
  1522.  * sa GetMessage, MSG
  1523.  */
  1524. BOOL GUIAPI HavePendingMessage (HWND hMainWnd);
  1525. #define PM_NOREMOVE     0x0000
  1526. #define PM_REMOVE       0x0001
  1527. #define PM_NOYIELD      0x0002
  1528. BOOL GUIAPI PeekPostMessage (PMSG pMsg, HWND hWnd, int iMsgFilterMin, 
  1529.                         int iMsgFilterMax, UINT uRemoveMsg);
  1530. /**
  1531.  * fn int PostMessage (HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam)
  1532.  * brief Posts a message into the message queue of a window and returns immediatly.
  1533.  *
  1534.  * This functions posts a message into the message queue of the window a hWnd 
  1535.  * and returns immediatly.
  1536.  *
  1537.  * param hWnd The handle to the window.
  1538.  * param iMsg The identifier of the message.
  1539.  * param wParam The first parameter of the message.
  1540.  * param lParam The second parameter of the message.
  1541.  * return ERR_OK on success, < 0 on errors.
  1542.  *
  1543.  * retval ERR_OK Post message successfully.
  1544.  * retval ERR_QUEUE_FULL The message queue is full.
  1545.  * retval ERR_INV_HWND Invalid window handle.
  1546.  *
  1547.  * sa SendMessage
  1548.  */               
  1549. int GUIAPI PostMessage (HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam);
  1550. /**
  1551.  * fn int SendMessage (HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam)
  1552.  * brief Sends a message to a window.
  1553.  *
  1554.  * This function sends a message to the window a hWnd, and will return 
  1555.  * until the message-handling process returns.
  1556.  *
  1557.  * param hWnd The handle to the window.
  1558.  * param iMsg The identifier of the message.
  1559.  * param wParam The first parameter of the message.
  1560.  * param lParam The second parameter of the message.
  1561.  * return The return value of the message handler.
  1562.  *
  1563.  * sa PostMessage
  1564.  */
  1565. int GUIAPI SendMessage (HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam);
  1566. /**
  1567.  * fn void GUIAPI SetAutoRepeatMessage (HWND hwnd, int msg, WPARAM wParam, LPARAM lParam)
  1568.  * brief Sets the auto-repeat message.
  1569.  *
  1570.  * This function sets the auto-repeat message. When the default message
  1571.  * procedure receives an MSG_IDLE message, the default handler will send
  1572.  * the auto-repeat message to the target window as a notification message.
  1573.  *
  1574.  * param hwnd The handle to the target window. Set it to HWND_DESKTOP
  1575.  *        to disable the auto-repeat message.
  1576.  * param msg The identifier of the auto-repeat message.
  1577.  * param wParam The first parameter of the auto-repeat message.
  1578.  * param lParam The second parameter of the auto-repeat message.
  1579.  */
  1580. void GUIAPI SetAutoRepeatMessage (HWND hwnd, int msg, WPARAM wParam, LPARAM lParam);
  1581. #ifdef _LITE_VERSION
  1582. /**
  1583.  * def SendAsyncMessage
  1584.  * brief Is an alias of a SendMessage for MiniGUI-Lite.
  1585.  * sa SendMessage
  1586.  */ 
  1587. #define SendAsyncMessage SendMessage
  1588. #define CLIENTS_TOPMOST          -1
  1589. #define CLIENTS_ALL              -2
  1590. #define CLIENTS_EXCEPT_TOPMOST   -3
  1591. #define CLIENT_ACTIVE            -4
  1592. /**
  1593.  * fn int Send2Client (MSG* msg, int cli)
  1594.  * brief Sends a message to a client.
  1595.  *
  1596.  * This function sends a message to the specified client a cli.
  1597.  *
  1598.  * param msg The pointer to the message.
  1599.  * param cli Either be the identifier of the targe client or one of the following values:
  1600.  *      - CLIENT_ACTIVEn
  1601.  *        The current active client on the topmost layer.
  1602.  *      - CLIENTS_TOPMOSTn
  1603.  *        All clients in the topmost layer.
  1604.  *      - CLIENTS_EXCEPT_TOPMOSTn
  1605.  *        All clients except clients in the topmost layer.
  1606.  *      - CLIENTS_ALLn
  1607.  *        All clients.
  1608.  * return SOCKERR_OK if all OK, < 0 on error.
  1609.  *
  1610.  * retval SOCKERR_OK       Read data successfully.
  1611.  * retval SOCKERR_IO       There are some I/O errors occurred.
  1612.  * retval SOCKERR_CLOSED   The socket has been closed by the peer.
  1613.  * retval SOCKERR_INVARG   You passed invalid arguments.
  1614.  *
  1615.  * note This function is only defined for MiniGUI-Lite, and
  1616.  *       can be called only by the server, i.e. a mginit.
  1617.  *
  1618.  * sa Send2TopMostClients, Send2ActiveClient
  1619.  */
  1620.     int GUIAPI Send2Client (MSG* msg, int cli);
  1621. /**
  1622.  * def send2client Send2Client
  1623.  * brief Is an alias of a Send2Client
  1624.  *
  1625.  * sa Send2Client
  1626.  */
  1627. #define send2client Send2Client
  1628. /**
  1629.  * fn BOOL Send2TopMostClients (int iMsg, WPARAM wParam, LPARAM lParam)
  1630.  * brief Sends a message to all clients in the topmost layer.
  1631.  *
  1632.  * This function sends the message specified by (a iMsg, a wParam, a lParam) 
  1633.  * to all clients in the topmost layer.
  1634.  *
  1635.  * param iMsg The message identifier.
  1636.  * param wParam The first parameter of the message.
  1637.  * param lParam The second parameter of the message.
  1638.  * return TRUE on success, FALSE on error.
  1639.  *
  1640.  * note This function is only defined for MiniGUI-Lite, and
  1641.  *       can be called only by the server, i.e. a mginit.
  1642.  *
  1643.  * sa Send2Client
  1644.  */
  1645.     BOOL GUIAPI Send2TopMostClients (int iMsg, WPARAM wParam, LPARAM lParam);
  1646. /**
  1647.  * fn BOOL Send2ActiveClient (int iMsg, WPARAM wParam, LPARAM lParam)
  1648.  * brief Sends a message to the active client in the topmost layer.
  1649.  *
  1650.  * This function sends the message specified by (a iMsg, a wParam, a lParam) 
  1651.  * to the current active client in the topmost layer.
  1652.  *
  1653.  * param iMsg The message identifier.
  1654.  * param wParam The first parameter of the message.
  1655.  * param lParam The second parameter of the message.
  1656.  * return TRUE on success, FALSE on error.
  1657.  *
  1658.  * note This function is only defined for MiniGUI-Lite, and
  1659.  *       can be called only by the server, i.e. a mginit.
  1660.  *
  1661.  * sa Send2Client
  1662.  */
  1663.     BOOL GUIAPI Send2ActiveClient (int iMsg, WPARAM wParam, LPARAM lParam);
  1664. #else
  1665. /**
  1666.  * fn int PostSyncMessage (HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam)
  1667.  * brief Posts a synchronical message to a window which is in different thread.
  1668.  *
  1669.  * This function posts the synchronical message specified by 
  1670.  * (a iMsg, a wParam, a lParam) to the window a hWnd which 
  1671.  * is in different thread. This function will return until 
  1672.  * the message is handled by the window procedure.
  1673.  *
  1674.  * note The destination window must belong to other thread.
  1675.  *
  1676.  * param iMsg The message identifier.
  1677.  * param wParam The first parameter of the message.
  1678.  * param lParam The second parameter of the message.
  1679.  * return The return value of the message handler.
  1680.  *
  1681.  * sa SendMessage
  1682.  */
  1683.     int GUIAPI PostSyncMessage (HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam);
  1684. /**
  1685.  * fn int SendAsyncMessage (HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam)
  1686.  * brief Sends an asynchronical message to a window.
  1687.  *
  1688.  * This function sends the asynchronical message specified by 
  1689.  * (a iMsg, a wParam, a lParam) to the window a hWnd 
  1690.  * which is in different thread. This function calls 
  1691.  * the window procedure immediately. So it is very dangerous.
  1692.  *
  1693.  * param iMsg The message identifier.
  1694.  * param wParam The first parameter of the message.
  1695.  * param lParam The second parameter of the message.
  1696.  * return The return value of the message handler.
  1697.  *
  1698.  * note This function may corrupt your data.
  1699.  *
  1700.  * sa PostSyncMessage
  1701.  */
  1702.     int GUIAPI SendAsyncMessage (HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam);
  1703. #endif
  1704. /**
  1705.  * fn int SendNotifyMessage (HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam)
  1706.  * brief Sends a notification message to a window.
  1707.  *
  1708.  * This function sends the notification message specified by (a iMsg, a wParam, a lParam)
  1709.  * to the window a hWnd. This function puts the notication message in the message queue
  1710.  * and then returns immediately.
  1711.  *
  1712.  * param hWnd The handle to the window.
  1713.  * param iMsg The message identifier.
  1714.  * param wParam The first parameter of the message.
  1715.  * param lParam The second parameter of the message.
  1716.  * return 0 if all OK, < 0 on error.
  1717.  *
  1718.  * sa SendMessage, PostMessage
  1719.  */
  1720. int GUIAPI SendNotifyMessage (HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam);
  1721. /**
  1722.  * fn int BroadcastMessage (int iMsg, WPARAM wParam, LPARAM lParam)
  1723.  * brief Broadcasts a message to all main window on the desktop.
  1724.  *
  1725.  * This function posts the message specified by (a iMsg, a wParam, a lParam)
  1726.  * to all the main windows on the desktop.
  1727.  *
  1728.  * param iMsg The message identifier.
  1729.  * param wParam The first parameter of the message.
  1730.  * param lParam The second parameter of the message.
  1731.  * return 0 if all OK, < 0 on error.
  1732.  *
  1733.  * sa PostMessage
  1734.  */
  1735. int GUIAPI BroadcastMessage (int iMsg, WPARAM wParam, LPARAM lParam);
  1736. /**
  1737.  * fn int PostQuitMessage (HWND hWnd)
  1738.  * brief Puts a MSG_QUIT message into the message queue of a main window.
  1739.  *
  1740.  * This function puts a MSG_QUIT message into the message queue of the
  1741.  * main window a hWnd. The next call to a GetMessage will return 0.
  1742.  *
  1743.  * param hWnd The handle to the main window.
  1744.  * return 0 if all OK, < 0 on error.
  1745.  *
  1746.  * sa GetMessage
  1747.  */
  1748. int GUIAPI PostQuitMessage (HWND hWnd);
  1749. #define KBD_LAYOUT_DEFAULT  "default"
  1750. #define KBD_LAYOUT_FRPC     "frpc"
  1751. #define KBD_LAYOUT_FR       "fr"
  1752. #define KBD_LAYOUT_DE       "de"
  1753. #define KBD_LAYOUT_DELATIN1 "delatin1"
  1754. #define KBD_LAYOUT_IT       "it"
  1755. #define KBD_LAYOUT_ES       "es"
  1756. #define KBD_LAYOUT_ESCP850  "escp850"
  1757. /**
  1758.  * fn BOOL SetKeyboardLayout (const char* kbd_layout)
  1759.  * brief Sets a new keyboard layout.
  1760.  *
  1761.  * This function sets the keymaps to translate key scancodes to MSG_CHAR
  1762.  * or MSG_KEYSYM messages. The default keymaps is for US PC keyboard 
  1763.  * layout, you can call this function to set a different keyboard layout.
  1764.  * The argument of a kbd_layout specifies the name of the keyboard layout.
  1765.  *
  1766.  * param kbd_layout The keyboard layout name. It can be one of the following values:
  1767.  *
  1768.  *      - KBD_LAYOUT_DEFAULTn
  1769.  *        The default keyboard layout, i.e., US PC.
  1770.  *      - KBD_LAYOUT_FRPCn
  1771.  *        The France PC keyboard layout.
  1772.  *      - KBD_LAYOUT_FRn
  1773.  *        The France keyboard layout.
  1774.  *      - KBD_LAYOUT_DEn
  1775.  *        The German keyboard layout.
  1776.  *      - KBD_LAYOUT_DELATIN1n
  1777.  *        The German Latin1 keyboard layout.
  1778.  *      - KBD_LAYOUT_ITn
  1779.  *        The Italian keyboard layout.
  1780.  *      - KBD_LAYOUT_ESn
  1781.  *        The Spanish keyboard layout.
  1782.  *      - KBD_LAYOUT_ESCP850n
  1783.  *        The Spanish CP850 keyboard layout.
  1784.  *
  1785.  * return TRUE for success, otherwise FALSE.
  1786.  *
  1787.  * sa TranslateMessage, MSG_CHAR, MSG_KEYSYM
  1788.  */
  1789. BOOL GUIAPI SetKeyboardLayout (const char* kbd_layout);
  1790. /**
  1791.  * fn BOOL TranslateMessage (PMSG pMsg)
  1792.  * brief Translates key down and key up messages to MSG_CHAR 
  1793.  *        message and post it into the message queue.
  1794.  *
  1795.  * This function translates key down and key up message to an MSG_CHAR 
  1796.  * message or some MSG_KEYSYM messages, and send the message(s) to 
  1797.  * the window procedure as a notification message. If the message is 
  1798.  * not a key message, this function does nothing.
  1799.  *
  1800.  * The behavior of this function is inflected by the current
  1801.  * keyboard layout. The default keyboard layout is US keyboard, but
  1802.  * you can call a SetKeyboardLayout function to set a different keyboard
  1803.  * layout.
  1804.  *
  1805.  * param pMsg The pointer of message.
  1806.  * return A boolean indicates whether the message is a key message.
  1807.  *
  1808.  * sa SetKeyboardLayout, MSG_CHAR, MSG_KEYSYM
  1809.  */
  1810. BOOL GUIAPI TranslateMessage (PMSG pMsg);
  1811. /**
  1812.  * fn int DispatchMessage (PMSG pMsg)
  1813.  * brief Dispatches a message to the window's callback procedure.
  1814.  *
  1815.  * This function dispatches the message pointed to by a pMsg to the
  1816.  * target window's callback procedure.
  1817.  *
  1818.  * param pMsg The pointer to the message.
  1819.  * return The return value of the message handler.
  1820.  *
  1821.  * sa GetMessage
  1822.  *
  1823.  * Example:
  1824.  *
  1825.  * include getmessage.c
  1826.  */
  1827. int GUIAPI DispatchMessage (PMSG pMsg);
  1828. /**
  1829.  * fn int ThrowAwayMessages (HWND pMainWnd)
  1830.  * brief Removes all messages in the message queue associated with a window.
  1831.  *
  1832.  * This function removes all messages which are associated with 
  1833.  * the specified window a pMainWnd.
  1834.  *
  1835.  * param pMainWnd The handle to the window.
  1836.  * return The number of thrown messages.
  1837.  *
  1838.  * sa EmptyMessageQueue
  1839.  */
  1840. int GUIAPI ThrowAwayMessages (HWND pMainWnd);
  1841. #ifdef _LITE_VERSION
  1842. /**
  1843.  * fn BOOL EmptyMessageQueue (HWND hWnd)
  1844.  * brief Empties a message queue.
  1845.  *
  1846.  * This function empties the message queue of the main window a hWnd.
  1847.  *
  1848.  * param hWnd The handle to the main window.
  1849.  * return TRUE on all success, FALSE on error.
  1850.  *
  1851.  * note Only defined for MiniGUI-Lite.
  1852.  *
  1853.  * sa ThrowAwayMessages
  1854.  */
  1855. BOOL GUIAPI EmptyMessageQueue (HWND hWnd);
  1856. #endif
  1857. #ifdef _MSG_STRING
  1858. /**
  1859.  * fn const char* GUIAPI Message2Str (int message)
  1860.  * brief Translates a message identifier to the message string.
  1861.  *
  1862.  * This function returns the message string of the message identifier a message.
  1863.  * E.g. this function will return the string of "MSG_CHAR" for MSG_CHAR message.
  1864.  * 
  1865.  * param message The message identifier.
  1866.  * return The message string.
  1867.  *
  1868.  * note Only defined for _MSG_STRING.
  1869.  *
  1870.  * sa PrintMessage
  1871.  */
  1872. const char* GUIAPI Message2Str (int message);
  1873. /**
  1874.  * fn void GUIAPI PrintMessage (FILE* fp, HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam)
  1875.  * brief Prints a message in readable string form to a stdio stream.
  1876.  *
  1877.  * This function prints the message specified by (a iMsg, a wParam, a lParam)
  1878.  * in readable string form to the stdio stream a fp.
  1879.  *
  1880.  * param fp The pointer to the FILE object.
  1881.  * param hWnd The target window of the message.
  1882.  * param iMsg The message identifier.
  1883.  * param wParam The first parameter of the message.
  1884.  * param lParam The second parameter of the message.
  1885.  *
  1886.  * sa Message2Str
  1887.  */
  1888. void GUIAPI PrintMessage (FILE* fp, HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam);
  1889. #endif
  1890.     /** @} end of msg_pass_fns */
  1891.     /**
  1892.      * defgroup msg_hook_fns Message or event hook functions
  1893.      * @{
  1894.      */
  1895. #define HOOK_GOON       0
  1896. #define HOOK_STOP       1
  1897. /**
  1898.  * Type of message hook function.
  1899.  */
  1900. typedef int (* MSGHOOK)(void* context, HWND dst_wnd, int msg, WPARAM wparam, LPARAM lparam);
  1901. /**
  1902.  * Structure defines a message hook.
  1903.  */
  1904. typedef struct _HOOKINFO
  1905. {
  1906.     /** the context which will be passed to the hook function. */
  1907.     void* context;
  1908.     /** the pointer to the hook function. */
  1909.     MSGHOOK hook;
  1910. } HOOKINFO;
  1911. /**
  1912.  * fn MSGHOOK GUIAPI RegisterKeyMsgHook (void* context, MSGHOOK hook)
  1913.  * brief Registers a key message hook.
  1914.  *
  1915.  * This function registers a key message hook pointed to by a hook.
  1916.  *
  1917.  * When the desktop receives a key message, it will send it to the hook first,
  1918.  * and passes the a context value to the hook as the first argument.
  1919.  *
  1920.  * param context The context value will be passed to the hook.
  1921.  * param hook The hook. This function will unregister the old hook if hook is NULL.
  1922.  * return The old hook.
  1923.  *
  1924.  * sa UnregisterHook, KEYMSGHOOK
  1925.  */
  1926. MSGHOOK GUIAPI RegisterKeyMsgHook (void* context, MSGHOOK hook);
  1927. /**
  1928.  * fn MSGHOOK GUIAPI RegisterMouseMsgHook (void* context, MSGHOOK hook)
  1929.  * brief Registers a mouse message hook.
  1930.  *
  1931.  * This function registers a mouse message hook pointed to by a hook.
  1932.  *
  1933.  * When the desktop receives a mouse message, it will send it to the hook first,
  1934.  * and passes the a context value to the hook as the first argument.
  1935.  *
  1936.  * param context The context value will be passed to the hook.
  1937.  * param hook The hook. This function will unregister the old hook if hook is NULL.
  1938.  * return The old hook.
  1939.  *
  1940.  * sa UnregisterHook, KEYMSGHOOK
  1941.  */
  1942. MSGHOOK GUIAPI RegisterMouseMsgHook (void* context, MSGHOOK hook);
  1943. #ifdef _LITE_VERSION
  1944. /**
  1945.  * var typedef int (* SRVEVTHOOK) (PMSG pMsg)
  1946.  * brief The type of the event hook.
  1947.  *
  1948.  * You can call a SetServerEventHook to set an event hook
  1949.  * in the server of the MiniGUI-Lite.
  1950.  *
  1951.  * If the event hook returns HOOK_GOON, a mginit will continue to
  1952.  * handle the event, and send it to the active client.
  1953.  * If the hook returns HOOK_STOP, a mginit will cancel normal handling.
  1954.  *
  1955.  * sa SetServerEventHook
  1956.  */
  1957. typedef int (* SRVEVTHOOK) (PMSG pMsg);
  1958. /**
  1959.  * fn void GUIAPI SetServerEventHook (SRVEVTHOOK SrvEvtHook)
  1960.  * brief Sets an event hook in the server of MiniGUI-Lite.
  1961.  *
  1962.  * This function sets the event hook as a SrvEvtHook in the server, 
  1963.  * i.e. mginit, of MiniGUI-Lite.
  1964.  *
  1965.  * param SrvEvtHook The pointer to the hook, NULL to cancel the hook.
  1966.  *
  1967.  * note Only defined for MiniGUI-Lite, and only can be used by the server.
  1968.  *
  1969.  * sa SRVEVTHOOK
  1970.  */
  1971. SRVEVTHOOK GUIAPI SetServerEventHook (SRVEVTHOOK SrvEvtHook);
  1972. #endif
  1973.     /** @} end of msg_hook_fns */
  1974.     /** @} end of msg_fns */
  1975.     /** @} end of fns */
  1976.     /**
  1977.      * defgroup styles Window styles
  1978.      * @{
  1979.      */
  1980. /**
  1981.  * def WS_NONE
  1982.  * brief None style.
  1983.  */
  1984. #define WS_NONE             0x00000000L
  1985. #define WS_OVERLAPPED       0x00000000L
  1986. /**
  1987.  * def WS_ABSSCRPOS
  1988.  * brief Create a main window whose position is based on absolute screen coordinates.
  1989.  */
  1990. #define WS_ABSSCRPOS        0x80000000L
  1991. /**
  1992.  * def WS_CHILD
  1993.  * brief Indicates the window is a child.
  1994.  */
  1995. #define WS_CHILD            0x40000000L
  1996. /* Clipping styles -- not supported so far */
  1997. /**
  1998.  * def WS_VISIBLE
  1999.  * brief Creates a window initially visible.
  2000.  */
  2001. #define WS_VISIBLE          0x08000000L
  2002. /**
  2003.  * def WS_DISABLED
  2004.  * brief Creates a window initially disabled.
  2005.  */
  2006. #define WS_DISABLED         0x04000000L
  2007. /* Main window states -- not supported so far */
  2008. #define WS_MINIMIZE         0x02000000L
  2009. #define WS_MAXIMIZE         0x01000000L
  2010. /**
  2011.  * def WS_CAPTION
  2012.  * brief Creates a main window with caption.
  2013.  */
  2014. #define WS_CAPTION          0x20000000L
  2015. /**
  2016.  * def WS_SYSMENU
  2017.  * brief Creates a main window with system menu.
  2018.  */
  2019. #define WS_SYSMENU          0x10000000L
  2020. #define WS_DLGFRAME         0x00800000L
  2021. /**
  2022.  * def WS_BORDER
  2023.  * brief Creates a window with border.
  2024.  */
  2025. #define WS_BORDER           0x00400000L
  2026. /**
  2027.  * def WS_THICKFRAME
  2028.  * brief Creates a window with thick frame.
  2029.  */
  2030. #define WS_THICKFRAME       0x00200000L
  2031. /**
  2032.  * def WS_THINFRAME
  2033.  * brief Creates a window with thin frame.
  2034.  */
  2035. #define WS_THINFRAME        0x00100000L
  2036. /**
  2037.  * def WS_VSCROLL
  2038.  * brief Creates a window with vertical scroll bar.
  2039.  */
  2040. #define WS_VSCROLL          0x00080000L
  2041. /**
  2042.  * def WS_HSCROLL
  2043.  * brief Creates a window with horizontal scroll bar.
  2044.  */
  2045. #define WS_HSCROLL          0x00040000L
  2046. /**
  2047.  * def WS_MINIMIZEBOX
  2048.  * brief Creates a window with minimizing box on caption.
  2049.  */
  2050. #define WS_MINIMIZEBOX      0x00020000L
  2051. /**
  2052.  * def WS_MAXIMIZEBOX
  2053.  * brief Creates a window with maximizing box on caption.
  2054.  */
  2055. #define WS_MAXIMIZEBOX      0x00010000L
  2056. /**
  2057.  * def WS_GROUP
  2058.  * brief Indicates the control is the leader of a group.
  2059.  */
  2060. #define WS_GROUP            0x00020000L
  2061. /**
  2062.  * def WS_TABSTOP
  2063.  * brief Indicates the user can set the input focus to the control by using Tab key.
  2064.  */
  2065. #define WS_TABSTOP          0x00010000L
  2066. /**
  2067.  * def WS_EX_NONE
  2068.  * brief None extended window style.
  2069.  */
  2070. #define WS_EX_NONE              0x00000000L     /* supported */
  2071. /**
  2072.  * def WS_EX_USEPRIVATECDC
  2073.  * brief The window has its own private client device context.
  2074.  *
  2075.  * sa CreatePrivateClientDC
  2076.  */
  2077. #define WS_EX_USEPRIVATECDC     0x00000002L     /* supported */
  2078. #define WS_EX_NOPARENTNOTIFY    0x00000004L
  2079. /**
  2080.  * def WS_EX_TOPMOST
  2081.  * brief The main window is a topmost (always on top) window.
  2082.  */
  2083. #define WS_EX_TOPMOST           0x00000008L     /* supported */
  2084. /**
  2085.  * def WS_EX_TRANSPARENT
  2086.  * brief The window is transparent.
  2087.  * note This style is only implemented for control.
  2088.  */
  2089. #define WS_EX_TRANSPARENT       0x00000020L
  2090. /**
  2091.  * def WS_EX_TOOLWINDOW
  2092.  * brief The main window is a tool window, which can not gain the input focus.
  2093.  */
  2094. #define WS_EX_TOOLWINDOW        0x00000080L     /* supported */
  2095. /**
  2096.  * def WS_EX_USEPARENTFONT
  2097.  * brief The window uses the default font of its parent.
  2098.  */
  2099. #define WS_EX_USEPARENTFONT     0x00000100L     /* supported */
  2100. #define WS_EX_CONTEXTHELP       0x00000400L
  2101. /**
  2102.  * def WS_EX_USEPARENTCURSOR
  2103.  * brief The window uses the default cursor of its parent.
  2104.  */
  2105. #define WS_EX_USEPARENTCURSOR   0x00000800L     /* supported */
  2106. #define WS_EX_RIGHT             0x00001000L
  2107. #define WS_EX_LEFT              0x00000000L
  2108. #define WS_EX_RTLREADING        0x00002000L
  2109. #define WS_EX_LTRREADING        0x00000000L
  2110. #define WS_EX_LEFTSCROLLBAR     0x00004000L
  2111. #define WS_EX_RIGHTSCROLLBAR    0x00000000L
  2112. #define WS_EX_CONTROLPARENT     0x00010000L
  2113. #define WS_EX_STATICEDGE        0x00020000L
  2114. #define WS_EX_APPWINDOW         0x00040000L
  2115. /* Obsolete style. */
  2116. #define WS_EX_IMECOMPOSE        0x10000000L
  2117. /**
  2118.  * def WS_EX_NOCLOSEBOX
  2119.  * brief The main window has no closing box on its caption.
  2120.  */
  2121. #define WS_EX_NOCLOSEBOX        0x20000000L     /* supported */
  2122. /**
  2123.  * def WS_EX_CTRLASMAINWIN
  2124.  * brief The control can be displayed out of the main window which contains the control.
  2125.  */
  2126. #define WS_EX_CTRLASMAINWIN     0x40000000L     /* supported */
  2127.     /** @} end of styles */
  2128.     /**
  2129.      * addtogroup fns Functions
  2130.      * @{
  2131.      */
  2132.     /**
  2133.      * defgroup window_fns Windowing functions
  2134.      * @{
  2135.      */
  2136.     /**
  2137.      * defgroup window_create_fns Window creating/destroying
  2138.      * @{
  2139.      */
  2140. /**
  2141.  * var typedef int (* WNDPROC)(HWND, int, WPARAM, LPARAM)
  2142.  * brief Type of the window callback procedure.
  2143.  */
  2144. typedef int (* WNDPROC)(HWND, int, WPARAM, LPARAM);
  2145. #define HWND_DESKTOP        0
  2146. #define HWND_INVALID        0xFFFFFFFF
  2147. /**
  2148.  * Structure defines a main window.
  2149.  */
  2150. typedef struct _MAINWINCREATE
  2151. {
  2152.     /** the style of the main window */
  2153.     DWORD dwStyle;
  2154.     /** the extended style of the main window */
  2155.     DWORD dwExStyle;
  2156.     /** the caption of the main window */
  2157.     const char* spCaption;
  2158.     /** the handle to the menu of the main window */
  2159.     HMENU hMenu;
  2160.     /** the handle to the cursor of the main window */
  2161.     HCURSOR hCursor;
  2162.     /** the handle to the icon of the main window */
  2163.     HICON hIcon;
  2164.     /** the hosting main window */
  2165.     HWND  hHosting;
  2166.     /** the window callback procedure */
  2167.     int (*MainWindowProc)(HWND, int, WPARAM, LPARAM);
  2168.     /** the position of the main window in the screen coordinates */
  2169.     int lx, ty, rx, by;
  2170.     /** the pixel value of background color of the main window */
  2171.     int iBkColor;
  2172.     /** the first private data associated with the main window */
  2173.     DWORD dwAddData;
  2174.     /** reserved, do not use */
  2175.     DWORD dwReserved;
  2176. }MAINWINCREATE;
  2177. typedef MAINWINCREATE* PMAINWINCREATE;
  2178. #ifndef _LITE_VERSION
  2179. int GUIAPI CreateThreadForMainWindow(pthread_t* thread, 
  2180.                                      pthread_attr_t* attr, 
  2181.                                      void * (*start_routine)(void *), 
  2182.                                      void * arg);
  2183. pthread_t GUIAPI GetMainWinThread(HWND hMainWnd);
  2184. int GUIAPI WaitMainWindowClose(HWND hWnd, void** returnval);
  2185. #endif
  2186. /**
  2187.  * fn void GUIAPI MainWindowThreadCleanup(HWND hMainWnd)
  2188.  * brief Cleans up system resource associated with a main window.
  2189.  *
  2190.  * This function cleans up the system resource such as message queue associated
  2191.  * with the main window a hMainWnd. a DestroyMainWindow does not
  2192.  * destroy all resource used by a main window, therefore, you should call
  2193.  * this function after calling a DestroyMainWindow and skipping out from
  2194.  * the message loop. After calling this function, the main window object
  2195.  * will destroied actually.
  2196.  *
  2197.  * param hMainWnd The handle to the main window.
  2198.  *
  2199.  * sa DestroyMainWindow
  2200.  */
  2201. void GUIAPI MainWindowThreadCleanup(HWND hMainWnd);
  2202. /**
  2203.  * def MainWindowCleanup(hwnd)
  2204.  * brief Is an alias of a MainWindowThreadCleanup
  2205.  *
  2206.  * sa MainWindowThreadCleanup
  2207.  */
  2208. #define MainWindowCleanup(hwnd)      MainWindowThreadCleanup(hwnd)
  2209. /**
  2210.  * fn HWND GUIAPI CreateMainWindow (PMAINWINCREATE pCreateStruct)
  2211.  * brief Creates a main window.
  2212.  * 
  2213.  * This function creates a main window by using information in 
  2214.  * the structure pointed to by a pCreateStruct, and returns 
  2215.  * the handle to the main window.
  2216.  *
  2217.  * param pCreateStruct The pointer to a MAINWINCREATE structure.
  2218.  * return The handle to the new main window; HWND_INVALID indicates an error.
  2219.  *
  2220.  * sa MAINWINCREATE, styles
  2221.  *
  2222.  * Example:
  2223.  *
  2224.  * include createmainwindow.c
  2225.  */
  2226. HWND GUIAPI CreateMainWindow (PMAINWINCREATE pCreateStruct);
  2227. /**
  2228.  * fn BOOL GUIAPI DestroyMainWindow (HWND hWnd)
  2229.  * brief Destroies a main window.
  2230.  *
  2231.  * This function destroies the main window specified by a hWnd.
  2232.  * It does not release all system resource used by the main window.
  2233.  * You should call a MainWindowThreadCleanup to destroy the main window
  2234.  * actually.
  2235.  *
  2236.  * param hWnd The handle to the main window.
  2237.  * return TRUE on success, FALSE on error.
  2238.  *
  2239.  * sa MainWindowThreadCleanup
  2240.  *
  2241.  * Example:
  2242.  *
  2243.  * include destroymainwindow.c
  2244.  */
  2245. BOOL GUIAPI DestroyMainWindow (HWND hWnd);
  2246. /**
  2247.  * fn int DefaultMainWinProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
  2248.  * brief Is the default main window callback procedure.
  2249.  *
  2250.  * This function is the default main window callback procedure.
  2251.  * You should call this function for all messages you do not want to handle
  2252.  * in your main window procedure.
  2253.  */
  2254. int DefaultMainWinProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam);
  2255. /**
  2256.  * fn int DefaultControlProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
  2257.  * brief Is the default control callback procedure.
  2258.  *
  2259.  * This function is the default control callback procedure.
  2260.  * You should call this function for all messages you do not want to handle
  2261.  * in your own control procedure.
  2262.  */
  2263. int DefaultControlProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam);
  2264. #ifdef _DEBUG
  2265. void GUIAPI DumpWindow (FILE* fp, HWND hWnd);
  2266. #endif /* _DEBUG */
  2267.     /** @} end of window_create_fns */
  2268.     /**
  2269.      * defgroup window_general_fns General window operations
  2270.      * @{
  2271.      */
  2272. #define SW_HIDE              0x0000
  2273. #define SW_SHOW              0x0010
  2274. #define SW_SHOWNORMAL        0x0100
  2275. /**
  2276.  * fn void GUIAPI UpdateWindow (HWND hWnd, BOOL bErase)
  2277.  * brief Updates a window.
  2278.  *
  2279.  * This function updates the window specified by a hWnd.
  2280.  * It will redraw the caption, the frame, and the menu bar of the window.
  2281.  * It will invalidate the client area of the window as well, and 
  2282.  * if b bErase is TRUE, the client area will be erased by using background color.
  2283.  *
  2284.  * param hWnd The handle to the window.
  2285.  * param bErase Indicates whether to erase the client area of the window.
  2286.  *
  2287.  * sa InvalidateRect
  2288.  */
  2289. void GUIAPI UpdateWindow (HWND hWnd, BOOL bErase);
  2290. /**
  2291.  * fn BOOL GUIAPI ShowWindow (HWND hWnd, int iCmdShow)
  2292.  * brief Shows or hides a window.
  2293.  *
  2294.  * This function shows or hides the window specified by a hWnd.
  2295.  * 
  2296.  * param hWnd The handle to the window.
  2297.  * param iCmdShow The command to show or hide, can be one of 
  2298.  * the following values:
  2299.  *      - SW_SHOWn
  2300.  *        Shows the window.
  2301.  *      - SW_HIDEn
  2302.  *        Hides the window.
  2303.  *      - SW_SHOWNORMALn
  2304.  *        Shows the window, and if the window is a main window 
  2305.  *        sets it to be the top most main window.
  2306.  * return TRUE on sucess, otherwise FALSE.
  2307.  */
  2308. BOOL GUIAPI ShowWindow (HWND hWnd, int iCmdShow);
  2309. /**
  2310.  * fn BOOL GUIAPI EnableWindow (HWND hWnd, BOOL fEnable)
  2311.  * brief Enables of disables a window.
  2312.  *
  2313.  * This function enables or disables mouse and keyboard input 
  2314.  * to the specified window a hWnd. When input is disabled, the window 
  2315.  * does not receive input such as mouse clicks and key presses. 
  2316.  * When input is enabled, the window receives all input.
  2317.  *
  2318.  * param hWnd The handle to the window.
  2319.  * param fEnable Indicates whether to enable or disable the window, TRUE for enable.
  2320.  * return The old enable state of the window.
  2321.  *
  2322.  * sa IsWindowEnabled
  2323.  */
  2324. BOOL GUIAPI EnableWindow (HWND hWnd, BOOL fEnable);
  2325. /**
  2326.  * fn BOOL GUIAPI IsWindowEnabled (HWND hWnd)
  2327.  * brief Determines whether the specified window is enabled for mouse and keyboard input.
  2328.  *
  2329.  * This function returns the enable/disable state of the window specified by 
  2330.  * a hWnd.
  2331.  *
  2332.  * param hWnd The handle to the window.
  2333.  * return The enable/disable state of the window, TRUE for enabled.
  2334.  * 
  2335.  * sa EnableWindow
  2336.  */
  2337. BOOL GUIAPI IsWindowEnabled (HWND hWnd);
  2338. /**
  2339.  * fn BOOL GUIAPI GetClientRect(HWND hWnd, PRECT prc)
  2340.  * brief Retrives the client rectangle of a window.
  2341.  *
  2342.  * This function retrives the coordinates of the client area of 
  2343.  * the window specified by a hWnd. The client coordinates specify 
  2344.  * the upper-left and lower-right corners of the client area. 
  2345.  * Because client coordinates are relative to the upper-left corner of 
  2346.  * a window's client area, the coordinates of the upper-left corner are always (0,0).
  2347.  *
  2348.  * param hWnd The handle to the window.
  2349.  * param prc The pointer to a RECT structure receives the client rectangle.
  2350.  * Note that the coordinates of the upper-left corner are always zero.
  2351.  *
  2352.  * return TRUE on sucess, otherwise FALSE.
  2353.  *
  2354.  * sa MoveWindow
  2355.  */
  2356. BOOL GUIAPI GetClientRect(HWND hWnd, PRECT prc);
  2357. /**
  2358.  * fn int GUIAPI GetWindowBkColor (HWND hWnd)
  2359.  * brief Returns the current background color of a window.
  2360.  *
  2361.  * This function returns the pixel value of the current background color of 
  2362.  * the window specified by a hWnd.
  2363.  *
  2364.  * param hWnd The handle to the window.
  2365.  * return The pixel value of the background color.
  2366.  *
  2367.  * /sa SetWindowBkColor
  2368.  */
  2369. int GUIAPI GetWindowBkColor (HWND hWnd);
  2370. /**
  2371.  * fn int GUIAPI SetWindowBkColor (HWND hWnd, int new_bkcolor)
  2372.  * brief Sets the background color of a window.
  2373.  *
  2374.  * This function sets the background color of the specified window a hWnd
  2375.  * to be new pixel value a new_backcolor. You should call a UpdateWindow
  2376.  * or a InvalidateRect in order that the new background color runs into
  2377.  * affect.
  2378.  *
  2379.  * param hWnd The handle to the window.
  2380.  * param new_bkcolor The pixel value of the new background color.
  2381.  * return The pixel value of the old background color.
  2382.  *
  2383.  * /sa GetWindowBkColor
  2384.  */
  2385. int GUIAPI SetWindowBkColor (HWND hWnd, int new_bkcolor);
  2386. /**
  2387.  * fn PLOGFONT GUIAPI GetWindowFont (HWND hWnd)
  2388.  * brief Retrives the default font of a window.
  2389.  *
  2390.  * This function retrives the default font of the specified 
  2391.  * window a hWnd.
  2392.  *
  2393.  * param hWnd The handle to the window.
  2394.  * return The default logical font of the window.
  2395.  *
  2396.  * /sa SetWindowFont
  2397.  */
  2398. PLOGFONT GUIAPI GetWindowFont (HWND hWnd);
  2399. /**
  2400.  * fn PLOGFONT GUIAPI SetWindowFont (HWND hWnd, PLOGFONT pLogFont)
  2401.  * brief Sets the default font of a window.
  2402.  *
  2403.  * This function sets the default font of the specified window a hWnd
  2404.  * to be the logical font a pLogFont. This function will send an
  2405.  * MSG_FONTCHANGING message to the window. If the handler of the message
  2406.  * returns non-zero value, this function will return immediately with the 
  2407.  * unchanged default font. Or, after the new default font set, this function 
  2408.  * will send an MSG_FONTCHANGED message to the window as a notification.
  2409.  *
  2410.  * param hWnd The handle to the window.
  2411.  * param pLogFont The new default logical font. If it is NULL, this function
  2412.  * will set the default font to be the system wchar font.
  2413.  * return The old default logical font of the window, NULL on error.
  2414.  *
  2415.  * sa GetWindowFont, GetSystemFont
  2416.  */
  2417. PLOGFONT GUIAPI SetWindowFont (HWND hWnd, PLOGFONT pLogFont);
  2418. /**
  2419.  * fn HCURSOR GUIAPI GetWindowCursor (HWND hWnd)
  2420.  * brief Retrives the current cursor of a window.
  2421.  *
  2422.  * This function retrives the current cursor of the specified
  2423.  * window a hWnd.
  2424.  *
  2425.  * param hWnd The handle to the window.
  2426.  * return The handle to the cursor.
  2427.  *
  2428.  * sa SetWindowCursor
  2429.  */
  2430. HCURSOR GUIAPI GetWindowCursor (HWND hWnd);
  2431. /**
  2432.  * fn HCURSOR GUIAPI SetWindowCursor (HWND hWnd, HCURSOR hNewCursor)
  2433.  * brief Sets the current cursor of a window.
  2434.  *
  2435.  * This function sets the current cursor of the specified window a hWnd with
  2436.  * argument a hNewCursor.
  2437.  *
  2438.  * param hWnd The handle to the window.
  2439.  * param hNewCursor The handle to the new cursor.
  2440.  * return The handle to the old cursor.
  2441.  *
  2442.  * sa GetWindowCursor
  2443.  */
  2444. HCURSOR GUIAPI SetWindowCursor (HWND hWnd, HCURSOR hNewCursor);
  2445. /**
  2446.  * fn DWORD GUIAPI GetWindowStyle (HWND hWnd)
  2447.  * brief Retrives the style of a window.
  2448.  *
  2449.  * This function retrives the style of the window specified by a hWnd.
  2450.  *
  2451.  * param hWnd The handle to the window.
  2452.  * return The style of the window.
  2453.  *
  2454.  * sa GetWindowExStyle
  2455.  */
  2456. DWORD GUIAPI GetWindowStyle (HWND hWnd);
  2457. /**
  2458.  * fn DWORD GUIAPI GetWindowExStyle (HWND hWnd)
  2459.  * brief Retrives the extended style of a window.
  2460.  *
  2461.  * This function retrives the extended style of the window specified by a hWnd.
  2462.  *
  2463.  * param hWnd The handle to the window.
  2464.  * return The extended style of the window.
  2465.  *
  2466.  * sa GetWindowStyle
  2467.  */
  2468. DWORD GUIAPI GetWindowExStyle (HWND hWnd);
  2469. BOOL GUIAPI ExcludeWindowStyle (HWND hWnd, DWORD dwStyle);
  2470. BOOL GUIAPI IncludeWindowStyle (HWND hWnd, DWORD dwStyle);
  2471. BOOL GUIAPI ExcludeWindowExStyle (HWND hWnd, DWORD dwStyle);
  2472. BOOL GUIAPI IncludeWindowExStyle (HWND hWnd, DWORD dwStyle);
  2473. /**
  2474.  * fn WNDPROC GUIAPI GetWindowCallbackProc (HWND hWnd)
  2475.  * brief Retrives the callback procedure of a window.
  2476.  *
  2477.  * This function retrives the window callback procedure of the specified window
  2478.  * a hWnd.
  2479.  *
  2480.  * param hWnd The handle to the window.
  2481.  * return The callback procedure of the window.
  2482.  *
  2483.  * sa SetWindowCallbackProc
  2484.  */
  2485. WNDPROC GUIAPI GetWindowCallbackProc (HWND hWnd);
  2486. /**
  2487.  * fn WNDPROC GUIAPI SetWindowCallbackProc (HWND hWnd, WNDPROC newProc)
  2488.  * brief Sets the callback procedure of a window.
  2489.  *
  2490.  * This function sets the window callback procedure of the specified window
  2491.  * a hWnd to be the procedure a newProc.
  2492.  *
  2493.  * param hWnd The handle to the window.
  2494.  * param newProc The new callback procedure of the window.
  2495.  * return The old callback procedure of the window.
  2496.  *
  2497.  * sa GetWindowCallbackProc
  2498.  *
  2499.  * Example:
  2500.  *
  2501.  * include subclass.c
  2502.  */
  2503. WNDPROC GUIAPI SetWindowCallbackProc (HWND hWnd, WNDPROC newProc);
  2504. /**
  2505.  * fn DWORD GUIAPI GetWindowAdditionalData (HWND hWnd)
  2506.  * brief Retrives the first additional data of a window.
  2507.  *
  2508.  * This function retrives the first additional data of the specified window
  2509.  * a hWnd.
  2510.  * 
  2511.  * param hWnd The handle to the window.
  2512.  * return The first additional data of the window.
  2513.  *
  2514.  * sa SetWindowAdditionalData
  2515.  */
  2516. DWORD GUIAPI GetWindowAdditionalData (HWND hWnd);
  2517. /**
  2518.  * fn DWORD GUIAPI SetWindowAdditionalData (HWND hWnd, DWORD newData)
  2519.  * brief Sets the first additional data of a window.
  2520.  *
  2521.  * This function sets the first additional data of the specified window
  2522.  * a hWnd.
  2523.  * 
  2524.  * param hWnd The handle to the window.
  2525.  * param newData The new first additional data of the window.
  2526.  * return The old first additional data of the window.
  2527.  *
  2528.  * note For a dialog box created by a DialogBoxIndirectParam, its second additional
  2529.  * data used internally by the system to save the return value of the box.
  2530.  * So you should avoid setting the second additional data of a dialog box.
  2531.  *
  2532.  * sa GetWindowAdditionalData
  2533.  */
  2534. DWORD GUIAPI SetWindowAdditionalData (HWND hWnd, DWORD newData);
  2535. /**
  2536.  * fn DWORD GUIAPI GetWindowAdditionalData2 (HWND hWnd)
  2537.  * brief Retrives the second additional data of a window.
  2538.  *
  2539.  * This function retrives the second additional data of the specified window
  2540.  * a hWnd.
  2541.  * 
  2542.  * param hWnd The handle to the window.
  2543.  * return The second additional data of the window.
  2544.  *
  2545.  * sa SetWindowAdditionalData2
  2546.  */
  2547. DWORD GUIAPI GetWindowAdditionalData2 (HWND hWnd);
  2548. /**
  2549.  * fn DWORD GUIAPI SetWindowAdditionalData2 (HWND hWnd, DWORD newData)
  2550.  * brief Sets the second additional data of a window.
  2551.  *
  2552.  * This function sets the second additional data of the specified window
  2553.  * a hWnd.
  2554.  * 
  2555.  * param hWnd The handle to the window.
  2556.  * param newData The new second additional data of the window.
  2557.  * return The old second additional data of the window.
  2558.  *
  2559.  * note For a control created by a CreateWindow, its second additional
  2560.  * data is reserved for internal use. So you should avoid setting the 
  2561.  * second additional data of a control.
  2562.  *
  2563.  * sa GetWindowAdditionalData2
  2564.  */
  2565. DWORD GUIAPI SetWindowAdditionalData2 (HWND hWnd, DWORD newData);
  2566. /**
  2567.  * fn DWORD GUIAPI GetWindowClassAdditionalData (HWND hWnd)
  2568.  * brief Retrives the additional data of a control class.
  2569.  *
  2570.  * This function retrives the additional data of the control class to which
  2571.  * the specified control a hWnd belongs.
  2572.  *
  2573.  * param hWnd The handle to the control.
  2574.  * return The additional data of the control class to which the control belongs.
  2575.  * Note that this function always returns zero for the main window.
  2576.  *
  2577.  * sa SetWindowClassAdditionalData
  2578.  */
  2579. DWORD GUIAPI GetWindowClassAdditionalData (HWND hWnd);
  2580. /**
  2581.  * fn DWORD GUIAPI SetWindowClassAdditionalData (HWND hWnd, DWORD newData)
  2582.  * brief Sets the additional data of a control class.
  2583.  *
  2584.  * This function sets the additional data of the control class to which
  2585.  * the specified control a hWnd belongs.
  2586.  *
  2587.  * param hWnd The handle to the control.
  2588.  * param newData The new additional data of the control class.
  2589.  * return The old additional data of the control class.
  2590.  *
  2591.  * note This function always does nothing and returns zero for the main window.
  2592.  *
  2593.  * sa SetWindowClassAdditionalData
  2594.  */
  2595. DWORD GUIAPI SetWindowClassAdditionalData (HWND hWnd, DWORD newData);
  2596. /**
  2597.  * fn const char* GUIAPI GetWindowCaption (HWND hWnd)
  2598.  * brief Retrives the caption of a window.
  2599.  *
  2600.  * This function retrives the caption of the specified window a hWnd.
  2601.  *
  2602.  * param hWnd The handle to the window.
  2603.  * return The pointer to the caption string of the window.
  2604.  *
  2605.  * sa SetWindowCaption
  2606.  */
  2607. const char* GUIAPI GetWindowCaption (HWND hWnd);
  2608. /**
  2609.  * fn BOOL GUIAPI SetWindowCaption (HWND hWnd, const char* spCaption)
  2610.  * brief Sets the caption of a window.
  2611.  *
  2612.  * This function sets the caption of the specified window a hWnd.
  2613.  *
  2614.  * param hWnd The handle to the window.
  2615.  * param spCaption The pointer to the new caption of the window.
  2616.  * return TRUE on success, otherwise FALSE.
  2617.  *
  2618.  * sa GetWindowCaption, SetWindowText
  2619.  */
  2620. BOOL GUIAPI SetWindowCaption (HWND hWnd, const char* spCaption);
  2621. /**
  2622.  * fn BOOL GUIAPI InvalidateRect(HWND hWnd, const RECT* prc, BOOL bEraseBkgnd)
  2623.  * brief Makes a rectangle region in the client area of a window invalid.
  2624.  *
  2625.  * This function adds a rectangle pointed to by a prc to the specified window's 
  2626.  * update region. The update region represents the portion of the window's client area 
  2627.  * that must be redrawn, and erase background if argument a bReaseBkgnd is set.
  2628.  *
  2629.  * param hWnd The handle to the window.
  2630.  * param prc The pointer to a RECT structure which defines the invalid rectangle.
  2631.  * param bEraseBkgnd Indicates whether the background should be erased.
  2632.  * return TRUE on success, otherwise FALSE.
  2633.  *
  2634.  * sa MSG_PAINT
  2635.  */
  2636. BOOL GUIAPI InvalidateRect(HWND hWnd, const RECT* prc, BOOL bEraseBkgnd);
  2637. /**
  2638.  * fn HDC GUIAPI BeginPaint(HWND hWnd)
  2639.  * brief Prepares a window for painting.
  2640.  *
  2641.  * This function prepares the specified window a hWnd for painting.
  2642.  * This function is called in the handler of MSG_PAINT message normally.
  2643.  * It returns a device context including the update region of the window.
  2644.  * When you are done with the device context, you should call a EndPaint
  2645.  * to finish the painting of the window.
  2646.  *
  2647.  * param hWnd The handle to the window.
  2648.  * return The device context.
  2649.  *
  2650.  * sa EndPaint
  2651.  */
  2652. HDC GUIAPI BeginPaint(HWND hWnd);
  2653. /**
  2654.  * fn void GUIAPI EndPaint(HWND hWnd, HDC hdc)
  2655.  * brief Marks the end of painting in a window.
  2656.  *
  2657.  * This function marks the end of painting in the specified window. 
  2658.  * This function is required for each call to the a BeginPaint function, 
  2659.  * but only after painting is complete.
  2660.  *
  2661.  * param hWnd The handle to the window.
  2662.  * param hdc The device context returned by BeginPaint.
  2663.  *
  2664.  * sa BeginPaint
  2665.  */
  2666. void GUIAPI EndPaint(HWND hWnd, HDC hdc);
  2667. /**
  2668.  * fn BOOL GUIAPI GetUpdateRect (HWND hWnd, RECT* update_rect)
  2669.  * brief Retrives the bounding box of the update region of a window.
  2670.  *
  2671.  * This function retrives the bounding box of the update region of
  2672.  * the specified window a hWnd.
  2673.  *
  2674.  * param hWnd The handle to the window.
  2675.  * param update_rect The pointer to a RECT structure which will contains 
  2676.  * the bounding box of the update region.
  2677.  * return TRUE on success, otherwise FALSE.
  2678.  *
  2679.  * sa InvalidateRect
  2680.  */
  2681. BOOL GUIAPI GetUpdateRect (HWND hWnd, RECT* update_rect);
  2682. /**
  2683.  * fn int GUIAPI ClientWidthToWindowWidth (DWORD dwStyle, int cw)
  2684.  * brief Calculates main window width from the width of the client area.
  2685.  *
  2686.  * This function calculates the main window width from the width of the client area.
  2687.  *
  2688.  * param dwStyle The style of the main window.
  2689.  * param cw The width of the client area.
  2690.  * return The width of the main window.
  2691.  *
  2692.  * sa ClientHeightToWindowHeight
  2693.  */
  2694. int GUIAPI ClientWidthToWindowWidth (DWORD dwStyle, int cw);
  2695. /**
  2696.  * fn int GUIAPI ClientHeightToWindowHeight (DWORD dwStyle, int ch, BOOL hasMenu)
  2697.  * brief Calculates main window height from the height of the client area.
  2698.  *
  2699.  * This function calculates the main window height from the height of
  2700.  * the client area.
  2701.  *
  2702.  * param dwStyle The style of the main window.
  2703.  * param ch The height of the client area.
  2704.  * param hasMenu Indicates whether the main window has menu.
  2705.  * return The height of the main window.
  2706.  *
  2707.  * sa ClientWidthToWindowWidth
  2708.  */
  2709. int GUIAPI ClientHeightToWindowHeight (DWORD dwStyle, int ch, BOOL hasMenu);
  2710. /**
  2711.  * fn void GUIAPI ClientToScreen (HWND hWnd, int* x, int* y)
  2712.  * brief Converts the client coordinates of a point to screen coordinates.
  2713.  *
  2714.  * This function converts the client coordinates of the specified point a (*x,*y)
  2715.  * in the specified window a hWnd to screen coordinates.
  2716.  *
  2717.  * param hWnd The handle to the window.
  2718.  * param x The pointer to the x coordinate.
  2719.  * param y The pointer to the y coordinate.
  2720.  * 
  2721.  * sa ScreenToClient
  2722.  */
  2723. void GUIAPI ClientToScreen (HWND hWnd, int* x, int* y);
  2724. /**
  2725.  * fn void GUIAPI ScreenToClient (HWND hWnd, int* x, int* y)
  2726.  * brief Converts the screen coordinates of a point to client coordinates.
  2727.  *
  2728.  * This function converts the screen coordinates of the specified point a (*x,*y)
  2729.  * to client coordinates of the specified window a hWnd 
  2730.  *
  2731.  * param hWnd The handle to the window.
  2732.  * param x The pointer to the x coordinate.
  2733.  * param y The pointer to the y coordinate.
  2734.  * 
  2735.  * sa ClientToScreen
  2736.  */
  2737. void GUIAPI ScreenToClient (HWND hWnd, int* x, int* y);
  2738. /**
  2739.  * fn void GUIAPI WindowToScreen (HWND hWnd, int* x, int* y)
  2740.  * brief Converts the window coordinates of a point to screen coordinates.
  2741.  *
  2742.  * This function converts the window coordinates of the specified point a (*x,*y)
  2743.  * in the specified window a hWnd to the screen coordinates.
  2744.  *
  2745.  * param hWnd The handle to the window.
  2746.  * param x The pointer to the x coordinate.
  2747.  * param y The pointer to the y coordinate.
  2748.  * 
  2749.  * sa ScreenToWindow
  2750.  */
  2751. void GUIAPI WindowToScreen (HWND hWnd, int* x, int* y);
  2752. /**
  2753.  * fn void GUIAPI ScreenToWindow (HWND hWnd, int* x, int* y)
  2754.  * brief Converts the screen coordinates of a point to window coordinates.
  2755.  *
  2756.  * This function converts the screen coordinates of the specified point a (*x,*y)
  2757.  * to the window coordinates of the specfied window a hWnd.
  2758.  *
  2759.  * param hWnd The handle to the window.
  2760.  * param x The pointer to the x coordinate.
  2761.  * param y The pointer to the y coordinate.
  2762.  * 
  2763.  * sa WindowToScreen
  2764.  */
  2765. void GUIAPI ScreenToWindow (HWND hWnd, int* x, int* y);
  2766. /**
  2767.  * fn BOOL GUIAPI IsMainWindow (HWND hWnd)
  2768.  * brief Determines whether a window is a main window.
  2769.  *
  2770.  * This function determines whether the specified window a hWnd is a main window.
  2771.  *
  2772.  * param hWnd The handle to the window.
  2773.  * return TRUE for main window, otherwise FALSE.