API.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:22k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * API.C
  3.  * GizmoBar Version 1.01
  4.  *
  5.  * API functions affecting a GizmoBar and a message processing
  6.  * function to handle the equivalent called through messages.
  7.  *
  8.  * Copyright (c)1993-1996 Microsoft Corporation, All Rights Reserved
  9.  *
  10.  * Kraig Brockschmidt, Software Design Engineer
  11.  * Microsoft Systems Developer Relations
  12.  *
  13.  * Internet  :  kraigb@microsoft.com
  14.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  15.  */
  16. #include <windows.h>
  17. #include <malloc.h>
  18. #include "gizmoint.h"
  19. /*
  20.  * GBMessageHandler
  21.  *
  22.  * Purpose:
  23.  *  Processes control messages that are equivalents of available
  24.  *  control API.  The data passed with these messages is simply
  25.  *  extracted from structures and passed as parameters to their
  26.  *  equivalent function.
  27.  *
  28.  * Parameters:
  29.  *  <Standard Message Parameters> plus
  30.  *  pGB             PGIZMOBAR providing control-specific data.
  31.  *
  32.  * Return Value:
  33.  *  LRESULT         Return value from equivalent API function.
  34.  */
  35. LRESULT GBMessageHandler(HWND hWnd, UINT iMsg, WPARAM wParam
  36.     , LPARAM lParam, PGIZMOBAR pGB)
  37.     {
  38.     LRESULT         lRet=0L;
  39.     LPCREATEGIZMOW   pCGW;
  40.     LPCREATEGIZMOA   pCGA;
  41.     LPGBMSG         pMsg;
  42.     LPGBGETTEXTW    pGTW;
  43.     LPGBGETTEXTA    pGTA;
  44.     LPGBGETINT      pGI;
  45.     LPGBSETINT      pSI;
  46.     if (NULL==pGB)
  47.         return 0L;
  48.     switch (iMsg)
  49.         {
  50.         case GBM_HWNDASSOCIATESET:
  51.             lRet=(LRESULT)(UINT)GBHwndAssociateSet(hWnd
  52.                 , (HWND)wParam);
  53.             break;
  54.         case GBM_HWNDASSOCIATEGET:
  55.             lRet=(LRESULT)(UINT)GBHwndAssociateGet(hWnd);
  56.             break;
  57.         case GBM_GIZMOADDW:
  58.             pCGW=(LPCREATEGIZMOW)lParam;
  59.             lRet=(LRESULT)GBGizmoAddW(pCGW->hWndParent, pCGW->iType
  60.                 , pCGW->iGizmo, pCGW->uID, pCGW->dx, pCGW->dy
  61.                 , pCGW->pszText, pCGW->hBmp, pCGW->iImage, pCGW->uState);
  62.             break;
  63.         case GBM_GIZMOADDA:
  64.             pCGA=(LPCREATEGIZMOA)lParam;
  65.             lRet=(LRESULT)GBGizmoAddA(pCGA->hWndParent, pCGA->iType
  66.                 , pCGA->iGizmo, pCGA->uID, pCGA->dx, pCGA->dy
  67.                 , pCGA->pszText, pCGA->hBmp, pCGA->iImage, pCGA->uState);
  68.             break;
  69.         case GBM_GIZMOREMOVE:
  70.             lRet=(LRESULT)GBGizmoRemove(hWnd, wParam);
  71.             break;
  72.         case GBM_GIZMOSENDMESSAGE:
  73.             pMsg=(LPGBMSG)lParam;
  74.             lRet=GBGizmoSendMessage(hWnd, wParam, pMsg->iMsg
  75.                 , pMsg->wParam, pMsg->lParam);
  76.             break;
  77.         case GBM_GIZMOSHOW:
  78.             lRet=(LRESULT)GBGizmoShow(hWnd, wParam
  79.                 , (BOOL)LOWORD(lParam));
  80.             break;
  81.         case GBM_GIZMOENABLE:
  82.             lRet=(LRESULT)GBGizmoEnable(hWnd, wParam
  83.                 , (BOOL)LOWORD(lParam));
  84.             break;
  85.         case GBM_GIZMOCHECK:
  86.             lRet=(LRESULT)GBGizmoCheck(hWnd, wParam
  87.                 , (BOOL)LOWORD(lParam));
  88.             break;
  89.         case GBM_GIZMOFOCUSSET:
  90.             lRet=(LRESULT)GBGizmoFocusSet(hWnd, wParam);
  91.             break;
  92.         case GBM_GIZMOEXIST:
  93.             lRet=(LRESULT)GBGizmoExist(hWnd, wParam);
  94.             break;
  95.         case GBM_GIZMOTYPEGET:
  96.             lRet=(LRESULT)GBGizmoTypeGet(hWnd, wParam);
  97.             break;
  98.         case GBM_GIZMODATASET:
  99.             lRet=(LRESULT)GBGizmoDataSet(hWnd, wParam
  100.                 , (DWORD)lParam);
  101.             break;
  102.         case GBM_GIZMODATAGET:
  103.             lRet=(LRESULT)GBGizmoDataGet(hWnd, wParam);
  104.             break;
  105.         case GBM_GIZMONOTIFYSET:
  106.             lRet=(LRESULT)GBGizmoNotifySet(hWnd, wParam
  107.                 , (BOOL)LOWORD(lParam));
  108.             break;
  109.         case GBM_GIZMONOTIFYGET:
  110.             lRet=(LRESULT)GBGizmoNotifyGet(hWnd, wParam);
  111.             break;
  112.         case GBM_GIZMOTEXTGETW:
  113.             pGTW=(LPGBGETTEXTW)lParam;
  114.             lRet=(LRESULT)GBGizmoTextGetW(hWnd, wParam, pGTW->psz
  115.                 , pGTW->cch);
  116.             break;
  117.         case GBM_GIZMOTEXTGETA:
  118.             pGTA=(LPGBGETTEXTA)lParam;
  119.             lRet=(LRESULT)GBGizmoTextGetA(hWnd, wParam, pGTA->psz
  120.                 , pGTA->cch);
  121.             break;
  122.         case GBM_GIZMOTEXTSETW:
  123.             GBGizmoTextSetW(hWnd, wParam, (LPWSTR)lParam);
  124.             break;
  125.         case GBM_GIZMOTEXTSETA:
  126.             GBGizmoTextSetA(hWnd, wParam, (LPSTR)lParam);
  127.             break;
  128.         case GBM_GIZMOINTGET:
  129.             pGI=(LPGBGETINT)lParam;
  130.             lRet=(LRESULT)GBGizmoIntGet(hWnd, wParam, &pGI->fSuccess
  131.                 , pGI->fSigned);
  132.             break;
  133.         case GBM_GIZMOINTSET:
  134.             pSI=(LPGBSETINT)lParam;
  135.             GBGizmoIntSet(hWnd, wParam, pSI->uValue, pSI->fSigned);
  136.             break;
  137.         default:
  138.             break;
  139.         }
  140.     return lRet;
  141.     }
  142. /*
  143.  * PGizmoFromHwndID
  144.  *
  145.  * Purpose:
  146.  *  Retrieves the pGizmo for the given GizmoBar and the gizmo ID.
  147.  *
  148.  * Parameters:
  149.  *  hWnd            HWND of a GizmoBar.
  150.  *  uID             UINT gizmo identifier.
  151.  *
  152.  * Return Value:
  153.  *  PGIZMO          NULL if the gizmo does not exist or hWnd is
  154.  *                  invalid.  Non-NULL PGIZMO otherwise.
  155.  */
  156. PGIZMO PGizmoFromHwndID(HWND hWnd, UINT uID)
  157.     {
  158.     PGIZMOBAR     pGB;
  159.     if (!IsWindow(hWnd))
  160.         return FALSE;
  161.     pGB=(PGIZMOBAR)GetWindowLong(hWnd, GBWL_STRUCTURE);
  162.     if (NULL==pGB)
  163.         return FALSE;
  164.     return GizmoPFind(&pGB->pGizmos, uID);
  165.     }
  166. /*
  167.  * GBHwndAssociateSet
  168.  *
  169.  * Purpose:
  170.  *  Changes the associate window of a GizmoBar.
  171.  *
  172.  * Parameters:
  173.  *  hWnd            HWND of the control window.
  174.  *
  175.  * Set Parameters:
  176.  *  hWndAssociate   HWND of new associate.
  177.  *
  178.  * Return Value:
  179.  *  HWND            Handle of previous associate.
  180.  */
  181. HWND WINAPI GBHwndAssociateSet(HWND hWnd, HWND hWndNew)
  182.     {
  183.     HWND        hWndOld=NULL;
  184.     PGIZMOBAR   pGB;
  185.     pGB=(PGIZMOBAR)GetWindowLong(hWnd, GBWL_STRUCTURE);
  186.     if (NULL!=pGB)
  187.         {
  188.         hWndOld=pGB->hWndAssociate;
  189.         pGB->hWndAssociate=hWndNew;
  190.         if (NULL!=hWndOld)
  191.             SendCommand(hWndOld, pGB->uID, GBN_ASSOCIATELOSS, hWnd);
  192.         if (NULL!=hWndNew)
  193.             SendCommand(hWndNew, pGB->uID, GBN_ASSOCIATEGAIN, hWnd);
  194.         }
  195.     return hWndOld;
  196.     }
  197. /*
  198.  * GBHwndAssociateGet
  199.  *
  200.  * Purpose:
  201.  *  Retrieves the associate window of a GizmoBar
  202.  *
  203.  * Parameters:
  204.  *  hWnd            HWND of the control window.
  205.  *
  206.  * Set Parameters:
  207.  *  hWndAssociate   HWND of new associate.
  208.  *
  209.  * Return Value:
  210.  *  HWND            Handle of current associate.
  211.  */
  212. HWND WINAPI GBHwndAssociateGet(HWND hWnd)
  213.     {
  214.     HWND        hWndOld=NULL;
  215.     PGIZMOBAR   pGB;
  216.     pGB=(PGIZMOBAR)GetWindowLong(hWnd, GBWL_STRUCTURE);
  217.     if (NULL!=pGB)
  218.         hWndOld=pGB->hWndAssociate;
  219.     return hWndOld;
  220.     }
  221. /*
  222.  * GBGizmoAdd
  223.  *
  224.  * Purpose:
  225.  *  Creates a new gizmo on the GizmoBar.  Subsequent operations
  226.  *  should be done using the identifier, uID, for this gizmo.
  227.  *
  228.  * Parameters:
  229.  *  hWnd            HWND of the GizmoBar.
  230.  *  iType           UINT type of the gizmo to create.
  231.  *  iGizmo          UINT position (zero-based) at which to place the
  232.  *                  gizmo.
  233.  *  uID             UINT identifier for WM_COMMAND from this gizmo.
  234.  *  dx, dy          UINT dimensions of the gizmo.
  235.  *  pszText         LPTSTR initial text for edit, list, combo, and
  236.  *                  text gizmos.
  237.  *  hBitmap         HBITMAP for gizmos of the button types (COMMAND
  238.  *                  or ATTRIBUTE) specifies a source bitmap from
  239.  *                  which the button image is taken.
  240.  *  iImage          UINT index into hBitmap for the image for this
  241.  *                  button.
  242.  *  uState          UINT initial state of the gizmo.
  243.  *
  244.  * Return Value:
  245.  *  BOOL            TRUE if creation succeeded, FALSE otherwise.
  246.  */
  247. BOOL WINAPI GBGizmoAddW(HWND hWnd, UINT iType, UINT iGizmo, UINT uID
  248.     , UINT dx, UINT dy, LPWSTR pszText, HBITMAP hBmp, UINT iImage
  249.     , UINT uState)
  250.     {
  251.     BOOL        fSuccess;
  252.     PGIZMOBAR   pGB;
  253.     PGIZMO      pGizmo;
  254.     if (!IsWindow(hWnd))
  255.         return FALSE;
  256.     pGB=(PGIZMOBAR)GetWindowLong(hWnd, GBWL_STRUCTURE);
  257.     if (NULL==pGB)
  258.         return FALSE;
  259.     /*
  260.      * This automatically creates the windows, allocates structures,
  261.      * includes the gizmo in pGB->pGizmos, and so forth.
  262.      */
  263.     pGizmo=GizmoPAllocate(&fSuccess, &pGB->pGizmos, hWnd, iType
  264.         , iGizmo, uID, dx, dy, pszText, hBmp, iImage, uState);
  265.     if (fSuccess)
  266.         {
  267.         if (NULL!=pGB->hWndAssociate)
  268.             {
  269.             SendCommand(pGB->hWndAssociate,GBN_GIZMOADDED, pGB->uID
  270.                 , hWnd);
  271.             }
  272.         InvalidateRect(hWnd, NULL, TRUE);
  273.         UpdateWindow(hWnd);
  274.         }
  275.     else
  276.         GizmoPFree(&pGB->pGizmos, pGizmo);
  277.     return fSuccess;
  278.     }
  279. BOOL WINAPI GBGizmoAddA(HWND hWnd, UINT iType, UINT iGizmo, UINT uID
  280.     , UINT dx, UINT dy, LPSTR pszText, HBITMAP hBmp, UINT iImage
  281.     , UINT uState)
  282. {
  283.     LPWSTR  pszTemp;
  284.     BOOL    retVal;
  285.     if(pszText != NULL)
  286.     {
  287.         pszTemp = malloc((1+strlen(pszText))*sizeof(WCHAR));
  288.         if (pszTemp)
  289.         {
  290.             MultiByteToWideChar(CP_ACP, 0, pszText, -1, pszTemp, strlen(pszText)+1);
  291.             retVal=GBGizmoAddW(hWnd, iType, iGizmo, uID, dx, dy, pszTemp, hBmp, iImage, uState);
  292.             free(pszTemp);
  293.             return retVal;
  294.         }
  295.     }
  296.     else
  297.         return GBGizmoAddW(hWnd, iType, iGizmo, uID, dx, dy, NULL, hBmp, iImage, uState);
  298. }
  299. /*
  300.  * GBGizmoRemove
  301.  *
  302.  * Purpose:
  303.  *  Removes an existing gizmo from the GizmoBar.
  304.  *
  305.  * Parameters:
  306.  *  hWnd            HWND of the GizmoBar.
  307.  *  uID             UINT identifier for this gizmo.
  308.  *
  309.  * Return Value:
  310.  *  BOOL            TRUE if deletion succeeded, FALSE otherwise.
  311.  */
  312. BOOL WINAPI GBGizmoRemove(HWND hWnd, UINT uID)
  313.     {
  314.     PGIZMOBAR   pGB;
  315.     PGIZMO      pGizmo;
  316.     if (!IsWindow(hWnd))
  317.         return FALSE;
  318.     pGB=(PGIZMOBAR)GetWindowLong(hWnd, GBWL_STRUCTURE);
  319.     if (NULL==pGB)
  320.         return FALSE;
  321.     pGizmo=GizmoPFind(&pGB->pGizmos, uID);
  322.     if (NULL==pGizmo)
  323.         return FALSE;
  324.     GizmoPFree(&pGB->pGizmos, pGizmo);
  325.     if (NULL!=pGB->hWndAssociate)
  326.         {
  327.         SendCommand(pGB->hWndAssociate, GBN_GIZMOREMOVED, pGB->uID
  328.             , hWnd);
  329.         }
  330.     InvalidateRect(hWnd, NULL, TRUE);
  331.     UpdateWindow(hWnd);
  332.     return TRUE;
  333.     }
  334. /*
  335.  * GBGizmoSendMessage
  336.  *
  337.  * Purpose:
  338.  *  Implements the equivalent of SendMessage to a gizmo in the
  339.  *  GizmoBar.  Separators, command buttons, and attribute buttons
  340.  *  do not accept messages.
  341.  *
  342.  * Parameters:
  343.  *  hWnd            HWND of the GizmoBar.
  344.  *  uID             UINT identifier of the gizmo to affect.
  345.  *  iMsg            UINT message to send.
  346.  *  wParam          WPARAM of the message.
  347.  *  lParam          LPARAM of the message.
  348.  *
  349.  * Return Value:
  350.  *  LRESULT         Return value from the message.  0L if the
  351.  *                  gizmo does not accept messages.
  352.  */
  353. LRESULT WINAPI GBGizmoSendMessage(HWND hWnd, UINT uID, UINT iMsg
  354.     , WPARAM wParam, LPARAM lParam)
  355.     {
  356.     PGIZMO      pGizmo;
  357.     LONG        lRet=0L;
  358.     pGizmo=PGizmoFromHwndID(hWnd, uID);
  359.     if (NULL!=pGizmo && NULL!=pGizmo->hWnd)
  360.         lRet=SendMessage(pGizmo->hWnd, iMsg, wParam, lParam);
  361.     return lRet;
  362.     }
  363. /*
  364.  * GBGizmoShow
  365.  *
  366.  * Purpose:
  367.  *  Shows or hides a control, adjusting the positions of all others
  368.  *  to make room for or reuse the space for this control.
  369.  *
  370.  * Parameters:
  371.  *  hWnd            HWND of the GizmoBar.
  372.  *  uID             UINT identifier of the gizmo to affect.
  373.  *  fShow           BOOL TRUE to show the gizmo, FALSE to hide it.
  374.  *
  375.  * Return Value:
  376.  *  BOOL            TRUE if the function was successful, FALSE
  377.  *                  otherwise.
  378.  */
  379. BOOL WINAPI GBGizmoShow(HWND hWnd, UINT uID, BOOL fShow)
  380.     {
  381.     BOOL        fRet=FALSE;
  382.     PGIZMO      pGizmo;
  383.     pGizmo=PGizmoFromHwndID(hWnd, uID);
  384.     if (NULL!=pGizmo)
  385.         {
  386.         if (fShow && pGizmo->fHidden)
  387.             {
  388.             if (NULL!=pGizmo->hWnd)
  389.                 ShowWindow(pGizmo->hWnd, SW_SHOWNORMAL);
  390.             GizmosExpand(pGizmo);
  391.             }
  392.         if (!fShow && !pGizmo->fHidden)
  393.             {
  394.             if (NULL!=pGizmo->hWnd)
  395.                 ShowWindow(pGizmo->hWnd, SW_HIDE);
  396.             GizmosCompact(pGizmo);
  397.             }
  398.         //This will be right even if we didn't change anything.
  399.         pGizmo->fHidden=!fShow;
  400.         }
  401.     InvalidateRect(hWnd, NULL, TRUE);
  402.     UpdateWindow(hWnd);
  403.     return fRet;
  404.     }
  405. /*
  406.  * GBGizmoEnable
  407.  *
  408.  * Purpose:
  409.  *  Enables or disables a control on the GizmoBar.
  410.  *
  411.  * Parameters:
  412.  *  hWnd            HWND of the GizmoBar.
  413.  *  uID             UINT identifier of the gizmo to affect.
  414.  *  fEnable         BOOL TRUE to enable the gizmo, FALSE otherwise.
  415.  *
  416.  * Return Value:
  417.  *  BOOL            TRUE if the gizmo was previously disabled, FALSE
  418.  *                  otherwise.
  419.  */
  420. BOOL WINAPI GBGizmoEnable(HWND hWnd, UINT uID, BOOL fEnable)
  421.     {
  422.     PGIZMO      pGizmo;
  423.     BOOL        fRet=FALSE;
  424.     pGizmo=PGizmoFromHwndID(hWnd, uID);
  425.     if (NULL==pGizmo)
  426.         return FALSE;
  427.     fRet=(BOOL)(BUTTONGROUP_DISABLED & pGizmo->uState);
  428.     //Use windows to enable or disable window gizmos
  429.     if (NULL!=pGizmo->hWnd)
  430.         EnableWindow(pGizmo->hWnd, fEnable);
  431.     else
  432.         {
  433.         /*
  434.          * If we're not down, command and attribute buttons act
  435.          * the same.
  436.          */
  437.         if (!(BUTTONGROUP_DOWN & pGizmo->uState))
  438.             {
  439.             GizmoPStateSet(hWnd, pGizmo, fEnable
  440.                 ? COMMANDBUTTON_UP : COMMANDBUTTON_DISABLED);
  441.             }
  442.         else
  443.             {
  444.             /*
  445.              * Attribute buttons are a little more sensitive with
  446.              * DOWNDISABLED
  447.              */
  448.             GizmoPStateSet(hWnd, pGizmo, fEnable
  449.                 ? ATTRIBUTEBUTTON_DOWN
  450.                 : ATTRIBUTEBUTTON_DOWNDISABLED);
  451.             }
  452.         }
  453.     return fRet;
  454.     }
  455. /*
  456.  * GBGizmoCheck
  457.  *
  458.  * Purpose:
  459.  *  Checks or unchecks an attribute button in the GizmoBar.  If the
  460.  *  gizmo is part of a group of mutually exclusive attributes, then
  461.  *  other gizmos are unchecked when this one is checked.  If this is
  462.  *  the only one checked in these circumstances, this function is a
  463.  *  NOP.
  464.  *
  465.  * Parameters:
  466.  *  hWnd            HWND of the GizmoBar.
  467.  *  uID             UINT identifier of the gizmo to affect.
  468.  *  fCheck          BOOL TRUE to check this gizmo, FALSE to uncheck.
  469.  *
  470.  * Return Value:
  471.  *  BOOL            TRUE if the change took place.  FALSE otherwise.
  472.  */
  473. BOOL WINAPI GBGizmoCheck(HWND hWnd, UINT uID, BOOL fCheck)
  474.     {
  475.     PGIZMOBAR   pGB;
  476.     PGIZMO      pGizmo;
  477.     if (!IsWindow(hWnd))
  478.         return FALSE;
  479.     pGB=(PGIZMOBAR)GetWindowLong(hWnd, GBWL_STRUCTURE);
  480.     if (NULL==pGB)
  481.         return FALSE;
  482.     pGizmo=GizmoPFind(&pGB->pGizmos, uID);
  483.     if (NULL!=pGizmo)
  484.         GizmoPCheck(hWnd, pGizmo, fCheck);
  485.     return TRUE;
  486.     }
  487. /*
  488.  * GBGizmoFocusSet
  489.  *
  490.  * Purpose:
  491.  *  Sets the focus to a partuclar gizmo in the gizmo if that gizmo
  492.  *  can accept the focus.  Separators, attribute buttons, text,
  493.  *  and command buttons cannot have the focus.
  494.  *
  495.  * Parameters:
  496.  *  hWnd            HWND of the GizmoBar.
  497.  *  uID             UINT identifier of the gizmo to affect.
  498.  *
  499.  * Return Value:
  500.  *  BOOL            TRUE if the focus was set.  FALSE otherwise,
  501.  *                  such as when uID identifies a control that cannot
  502.  *                  have focus.
  503.  */
  504. UINT WINAPI GBGizmoFocusSet(HWND hWnd, UINT uID)
  505.     {
  506.     PGIZMO      pGizmo;
  507.     BOOL        fRet=FALSE;
  508.     pGizmo=PGizmoFromHwndID(hWnd, uID);
  509.     if (NULL!=pGizmo && NULL!=pGizmo->hWnd)
  510.         {
  511.         fRet=TRUE;
  512.         SetFocus(pGizmo->hWnd);
  513.         }
  514.     return fRet;
  515.     }
  516. /*
  517.  * GBGizmoExist
  518.  *
  519.  * Purpose:
  520.  *  Determines if a gizmo of a given identifier exists in the
  521.  *  GizmoBar.
  522.  *
  523.  * Parameters:
  524.  *  hWnd            HWND of the GizmoBar.
  525.  *  uID             UINT identifier to verify.
  526.  *
  527.  * Return Value:
  528.  *  BOOL            TRUE if the gizmo exists, FALSE otherwise.
  529.  */
  530. BOOL WINAPI GBGizmoExist(HWND hWnd, UINT uID)
  531.     {
  532.     return (NULL!=PGizmoFromHwndID(hWnd, uID));
  533.     }
  534. /*
  535.  * GBGizmoTypeGet
  536.  *
  537.  * Purpose:
  538.  *  Returns the type of the gizmo specified by the given identifer.
  539.  *
  540.  * Parameters:
  541.  *  hWnd            HWND of the GizmoBar.
  542.  *  uID             UINT identifier to find.
  543.  *
  544.  * Return Value:
  545.  *  int             A GIZMOTYPE_* value if the function is
  546.  *                  successful, otherwise -1.
  547.  */
  548. int WINAPI GBGizmoTypeGet(HWND hWnd, UINT uID)
  549.     {
  550.     int         iRet=-1;
  551.     PGIZMO      pGizmo;
  552.     pGizmo=PGizmoFromHwndID(hWnd, uID);
  553.     if (NULL!=pGizmo)
  554.         iRet=pGizmo->iType;
  555.     return iRet;
  556.     }
  557. /*
  558.  * GBGizmoDataSet
  559.  * GBGizmoDataGet
  560.  *
  561.  * Purpose:
  562.  *  Sets or retrieves an extra DWORD value associated with the given
  563.  *  gizmo.  Applications can store any information here they please.
  564.  *
  565.  * Parameters:
  566.  *  hWnd            HWND of the GizmoBar.
  567.  *  uID             UINT identifier of the gizmo.
  568.  *  dwData          (Set only) DWORD data to store with the gizmo.
  569.  *
  570.  * Return Value:
  571.  *  DWORD           Set:  Previous value
  572.  *                  Get:  Current value
  573.  */
  574. DWORD WINAPI GBGizmoDataSet(HWND hWnd, UINT uID, DWORD dwData)
  575.     {
  576.     PGIZMO      pGizmo;
  577.     DWORD       dw=0L;
  578.     pGizmo=PGizmoFromHwndID(hWnd, uID);
  579.     if (NULL!=pGizmo)
  580.         {
  581.         dw=pGizmo->dwData;
  582.         pGizmo->dwData=dwData;
  583.         }
  584.     return dw;
  585.     }
  586. DWORD WINAPI GBGizmoDataGet(HWND hWnd, UINT uID)
  587.     {
  588.     PGIZMO      pGizmo;
  589.     DWORD       dw=0L;
  590.     pGizmo=PGizmoFromHwndID(hWnd, uID);
  591.     if (NULL!=pGizmo)
  592.         dw=pGizmo->dwData;
  593.     return dw;
  594.     }
  595. /*
  596.  * GBGizmoNotifySet
  597.  * GBGizmoNotifyGet
  598.  *
  599.  * Purpose:
  600.  *  Sets or retrieves the notify status of a gizmo.  If notify is
  601.  *  FALSE, the no WM_COMMAND messages are sent from the GizmoBar to
  602.  *  the parent window when this gizmo is used.
  603.  *
  604.  * Parameters:
  605.  *  hWnd            HWND of the GizmoBar.
  606.  *  uID             UINT identifier of the gizmo.
  607.  *  fNotify         (Set only) BOOL new notify status to set.
  608.  *
  609.  * Return Value:
  610.  *  BOOL            Set:  Previous value of the notify flag.
  611.  *                  Get:  Current value of the notify flag.
  612.  */
  613. BOOL WINAPI GBGizmoNotifySet(HWND hWnd, UINT uID, BOOL fNotify)
  614.     {
  615.     PGIZMO      pGizmo;
  616.     BOOL        fRet=FALSE;
  617.     pGizmo=PGizmoFromHwndID(hWnd, uID);
  618.     if (NULL!=pGizmo)
  619.         {
  620.         fRet=pGizmo->fNotify;
  621.         pGizmo->fNotify=fNotify;
  622.         }
  623.     return fRet;
  624.     }
  625. BOOL WINAPI GBGizmoNotifyGet(HWND hWnd, UINT uID)
  626.     {
  627.     PGIZMO      pGizmo;
  628.     BOOL        fRet=FALSE;
  629.     pGizmo=PGizmoFromHwndID(hWnd, uID);
  630.     if (NULL!=pGizmo)
  631.         fRet=pGizmo->fNotify;
  632.     return fRet;
  633.     }
  634. /*
  635.  * GBGizmoTextSet
  636.  * GBGizmoTextGet
  637.  *
  638.  * Purpose:
  639.  *  Retrieves or sets text in a GizmoBar gizmo.  Separators, command
  640.  *  buttons, and attribute buttons are not affected by this call.
  641.  *
  642.  * Parameters:
  643.  *  hWnd            HWND of the GizmoBar.
  644.  *  uID             UINT identifying the gizmo.
  645.  *  psz             LPTSTR (Set) providing the text to show in the
  646.  *                  window or (Get) pointing to a buffer to receive
  647.  *                  the text.
  648.  *  cch             (Get only) UINT maximum number of chars to copy
  649.  *                  to psz.
  650.  *
  651.  * Return Value:
  652.  *  int             Number of characters copied to psz.
  653.  */
  654. void WINAPI GBGizmoTextSetW(HWND hWnd, UINT uID, LPWSTR psz)
  655.     {
  656.     //This fails on non-windowed gizmos anyway, so we don't check.
  657.     SetDlgItemTextW(hWnd, uID, psz);
  658.     return;
  659.     }
  660. void WINAPI GBGizmoTextSetA(HWND hWnd, UINT uID, LPSTR psz)
  661.     {
  662.     //This fails on non-windowed gizmos anyway, so we don't check.
  663.     SetDlgItemTextA(hWnd, uID, psz);
  664.     return;
  665.     }
  666. int WINAPI GBGizmoTextGetW(HWND hWnd, UINT uID, LPWSTR psz, UINT cch)
  667.     {
  668.     //This fails on non-windowed gizmos anyway, so we don't check.
  669.     return GetDlgItemTextW(hWnd, uID, psz, cch);
  670.     }
  671. int WINAPI GBGizmoTextGetA(HWND hWnd, UINT uID, LPSTR psz, UINT cch)
  672.     {
  673.     //This fails on non-windowed gizmos anyway, so we don't check.
  674.     return GetDlgItemTextA(hWnd, uID, psz, cch);
  675.     }
  676. /*
  677.  * GBGizmoIntSet
  678.  * GBGizmoIntGet
  679.  *
  680.  * Purpose:
  681.  *  Retrieves or sets an integer in a GizmoBar gizmo.  Separators,
  682.  *  command buttons, and attribute buttons are not affected by this
  683.  *  call.
  684.  *
  685.  * Parameters:
  686.  *  hWnd            HWND of the GizmoBar.
  687.  *  uID             UINT identifying the gizmo.
  688.  *
  689.  *  (Set only)
  690.  *  u               UINT value to set in the gizmo.
  691.  *  fSigned         BOOL TRUE to indicate if the value is signed.
  692.  *
  693.  *  (Get only)
  694.  *  pfTrans         BOOL FAR * in which the success of the function
  695.  *                  is returned.
  696.  *  fSigned         BOOL TRUE to indicate if the value is signed.
  697.  *
  698.  * Return Value:
  699.  *  (Set): None
  700.  *  (Get): UINT     Integer translation of the gizmo's text.
  701.  */
  702. void WINAPI GBGizmoIntSet(HWND hWnd, UINT uID, UINT u, BOOL fSigned)
  703.     {
  704.     //This fails on non-windowed gizmos anyway, so we don't check.
  705.     SetDlgItemInt(hWnd, uID, u, fSigned);
  706.     return;
  707.     }
  708. UINT WINAPI GBGizmoIntGet(HWND hWnd, UINT uID, BOOL FAR *pfTrans
  709.     , BOOL fSigned)
  710.     {
  711.     //This fails on non-windowed gizmos anyway, so we don't check.
  712.     return GetDlgItemInt(hWnd, uID, pfTrans, fSigned);
  713.     }