Ignore:
Timestamp:
Nov 27, 2002, 2:56:27 PM (23 years ago)
Author:
sandervl
Message:

CopyBitmap fix + use PM bitmaps for standard user32 frame buttons in OS/2 GUI mode

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/pmwindow.cpp

    r9297 r9437  
    1 /* $Id: pmwindow.cpp,v 1.189 2002-09-26 16:04:34 sandervl Exp $ */
     1/* $Id: pmwindow.cpp,v 1.190 2002-11-27 13:56:26 sandervl Exp $ */
    22/*
    33 * Win32 Window Managment Code for OS/2
     
    2828#include <winuser32.h>
    2929#include <wprocess.h>
    30 #include <misc.h>
     30#include <dbglog.h>
    3131#include <win32wbase.h>
    3232#include <win32dlg.h>
     
    6969BOOL    fDragDropActive = FALSE;
    7070BOOL    fDragDropDisabled = FALSE;
    71 HBITMAP hbmFrameMenu[3] = {0};
     71
     72
     73#define PMMENU_MINBUTTON           0
     74#define PMMENU_MAXBUTTON           1
     75#define PMMENU_RESTOREBUTTON       2
     76#define PMMENU_CLOSEBUTTON         3
     77#define PMMENU_MINBUTTONDOWN       4
     78#define PMMENU_MAXBUTTONDOWN       5
     79#define PMMENU_RESTOREBUTTONDOWN   6
     80#define PMMENU_CLOSEBUTTONDOWN     7
     81
     82HBITMAP hbmFrameMenu[8] = {0};
     83
     84//Win32 bitmap handles of the OS/2 min, max and restore buttons
     85HBITMAP hBmpMinButton     = 0;
     86HBITMAP hBmpMaxButton     = 0;
     87HBITMAP hBmpRestoreButton = 0;
     88HBITMAP hBmpCloseButton   = 0;
     89HBITMAP hBmpMinButtonDown     = 0;
     90HBITMAP hBmpMaxButtonDown     = 0;
     91HBITMAP hBmpRestoreButtonDown = 0;
     92HBITMAP hBmpCloseButtonDown   = 0;
    7293
    7394static PFNWP pfnFrameWndProc = NULL;
     
    88109static char *PMDragExtractFiles(PDRAGINFO pDragInfo, ULONG *pcItems, ULONG *pulBytes);
    89110static BOOL  PMDragValidate(PDRAGINFO pDragInfo);
     111static void  QueryPMMenuBitmaps();
    90112
    91113MRESULT EXPENTRY Win32WindowProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
     
    217239    if(fOS2Look)
    218240    {
    219         CHAR szDisplay[30];
    220         HMODULE hModDisplay;
    221 
    222241        SYSCOLOR_Init(FALSE); //use OS/2 colors
    223 
    224         // query the name of the display driver resource DLL to load
    225         // some standard bitmaps from it
    226         DspInitSystemDriverName(szDisplay, sizeof(szDisplay));
    227         DosQueryModuleHandle(szDisplay, &hModDisplay);
    228 
    229         hbmFrameMenu[0] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MINBUTTON, 0, 0);
    230         hbmFrameMenu[1] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MAXBUTTON, 0, 0);
    231         hbmFrameMenu[2] = GpiLoadBitmap(hdc, hModDisplay, SBMP_RESTOREBUTTON, 0, 0);
     242        QueryPMMenuBitmaps();
    232243    }
    233244
     
    244255} /* End of main */
    245256//******************************************************************************
     257HBITMAP OPEN32API _O32_CreateBitmapFromPMHandle(HBITMAP hPMBitmap);
     258
     259inline HBITMAP O32_CreateBitmapFromPMHandle(HBITMAP hPMBitmap)
     260{
     261 HBITMAP yyrc;
     262 USHORT sel = RestoreOS2FS();
     263
     264    yyrc = _O32_CreateBitmapFromPMHandle(hPMBitmap);
     265    SetFS(sel);
     266
     267    return yyrc;
     268}
     269//******************************************************************************
     270static void QueryPMMenuBitmaps()
     271{
     272    CHAR szDisplay[30];
     273    HMODULE hModDisplay;
     274
     275    if(hbmFrameMenu[0] == 0)
     276    {
     277        CHAR szDisplay[30];
     278        HMODULE hModDisplay;
     279        HDC   hdc;              /* Device-context handle                */
     280        DEVOPENSTRUC dop = {NULL, "DISPLAY", NULL, NULL, NULL, NULL,
     281                            NULL, NULL, NULL};
     282
     283        /* create memory device context */
     284        hdc = DevOpenDC(hab, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&dop, NULLHANDLE);
     285
     286        DspInitSystemDriverName(szDisplay, sizeof(szDisplay));
     287        DosQueryModuleHandle(szDisplay, &hModDisplay);
     288
     289        hbmFrameMenu[PMMENU_MINBUTTON] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MINBUTTON, 0, 0);
     290        hbmFrameMenu[PMMENU_MINBUTTONDOWN] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MINBUTTONDEP, 0, 0);
     291        hbmFrameMenu[PMMENU_MAXBUTTON] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MAXBUTTON, 0, 0);
     292        hbmFrameMenu[PMMENU_MAXBUTTONDOWN] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MAXBUTTONDEP, 0, 0);
     293        hbmFrameMenu[PMMENU_RESTOREBUTTON] = GpiLoadBitmap(hdc, hModDisplay, SBMP_RESTOREBUTTON, 0, 0);
     294        hbmFrameMenu[PMMENU_RESTOREBUTTONDOWN] = GpiLoadBitmap(hdc, hModDisplay, SBMP_RESTOREBUTTONDEP, 0, 0);
     295        hbmFrameMenu[PMMENU_CLOSEBUTTON] = GpiLoadBitmap(hdc, hModDisplay, SBMP_CLOSE, 0, 0);
     296        hbmFrameMenu[PMMENU_CLOSEBUTTONDOWN] = GpiLoadBitmap(hdc, hModDisplay, SBMP_CLOSEDEP, 0, 0);
     297
     298#ifdef NEW_WGSS
     299        //Create win32 bitmap handles of the OS/2 min, max and restore buttons
     300        hBmpMinButton     = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_MINBUTTON]);
     301        hBmpMinButtonDown = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_MINBUTTONDOWN]);
     302        hBmpMaxButton     = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_MAXBUTTON]);
     303        hBmpMaxButtonDown = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_MAXBUTTONDOWN]);
     304        hBmpRestoreButton = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_RESTOREBUTTON]);
     305        hBmpRestoreButtonDown = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_RESTOREBUTTONDOWN]);
     306        hBmpCloseButton   = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_CLOSEBUTTON]);
     307        hBmpCloseButtonDown   = O32_CreateBitmapFromPMHandle(hbmFrameMenu[PMMENU_CLOSEBUTTONDOWN]);
     308#endif
     309        DevCloseDC(hdc);
     310    }
     311}
     312//******************************************************************************
    246313//menu.cpp
    247314BOOL MENU_Init();
    248315//******************************************************************************
    249 // AH TODO 2002-07-18
    250 // Note: this looks a lot like unnecessary code duplication. We should call this
    251 // function from InitPM...
    252316//******************************************************************************
    253317void WIN32API SetWindowAppearance(int fLooks)
     
    255319    if(fLooks == OS2_APPEARANCE || fLooks == OS2_APPEARANCE_SYSMENU)
    256320    {
    257         CHAR szDisplay[30];
    258         HMODULE hModDisplay;
    259 
    260321        SYSCOLOR_Init(FALSE); //use OS/2 colors
    261 
    262         if(hbmFrameMenu[0] == 0)
    263         {
    264             CHAR szDisplay[30];
    265             HMODULE hModDisplay;
    266             HDC   hdc;              /* Device-context handle                */
    267             DEVOPENSTRUC dop = {NULL, "DISPLAY", NULL, NULL, NULL, NULL,
    268                                 NULL, NULL, NULL};
    269 
    270             /* create memory device context */
    271             hdc = DevOpenDC(hab, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&dop, NULLHANDLE);
    272 
    273             DspInitSystemDriverName(szDisplay, sizeof(szDisplay));
    274             DosQueryModuleHandle(szDisplay, &hModDisplay);
    275 
    276             hbmFrameMenu[0] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MINBUTTON, 0, 0);
    277             hbmFrameMenu[1] = GpiLoadBitmap(hdc, hModDisplay, SBMP_MAXBUTTON, 0, 0);
    278             hbmFrameMenu[2] = GpiLoadBitmap(hdc, hModDisplay, SBMP_RESTOREBUTTON, 0, 0);
    279             DevCloseDC(hdc);
    280         }
     322        QueryPMMenuBitmaps();
    281323    }
    282324    fOS2Look = fLooks;
     
    12591301                     //SC_RESTORE -> SC_MINIMIZE
    12601302                     dprintf(("%x -> SC_RESTORE -> SC_MINIMIZE", win32wnd->getWindowHandle()));
    1261                      FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), 0, SC_RESTORE, SC_MINIMIZE, hbmFrameMenu[0]);
     1303                     FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), 0, SC_RESTORE, SC_MINIMIZE, hbmFrameMenu[PMMENU_MINBUTTON]);
    12621304                     if(dwStyle & WS_MAXIMIZE_W) {
    12631305                         //SC_MAXIMIZE -> SC_RESTORE
    12641306                         dprintf(("%x -> SC_MAXIMIZE -> SC_RESTORE", win32wnd->getWindowHandle()));
    1265                          FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), MIT_END, SC_MAXIMIZE, SC_RESTORE, hbmFrameMenu[2]);
     1307                         FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), MIT_END, SC_MAXIMIZE, SC_RESTORE, hbmFrameMenu[PMMENU_RESTOREBUTTON]);
    12661308                     }
    12671309                 }
     
    12701312                     //SC_RESTORE -> SC_MAXIMIZE
    12711313                     dprintf(("%x -> SC_RESTORE -> SC_MAXIMIZE", win32wnd->getWindowHandle()));
    1272                      FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), MIT_END, SC_RESTORE, SC_MAXIMIZE, hbmFrameMenu[1]);
     1314                     FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), MIT_END, SC_RESTORE, SC_MAXIMIZE, hbmFrameMenu[PMMENU_MAXBUTTON]);
    12731315                 }
    12741316                 else
     
    12761318                     //SC_MINIMIZE -> SC_RESTORE
    12771319                     dprintf(("%x -> SC_MINIMIZE -> SC_RESTORE", win32wnd->getWindowHandle()));
    1278                      FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), 0, SC_MINIMIZE, SC_RESTORE, hbmFrameMenu[2]);
     1320                     FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), 0, SC_MINIMIZE, SC_RESTORE, hbmFrameMenu[PMMENU_RESTOREBUTTON]);
    12791321                 }
    12801322                 else
     
    12821324                     //SC_MAXIMIZE -> SC_RESTORE
    12831325                     dprintf(("%x -> SC_MAXIMIZE -> SC_RESTORE", win32wnd->getWindowHandle()));
    1284                      FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), MIT_END, SC_MAXIMIZE, SC_RESTORE, hbmFrameMenu[2]);
     1326                     FrameReplaceMenuItem(WinWindowFromID(hwnd, FID_MINMAX), MIT_END, SC_MAXIMIZE, SC_RESTORE, hbmFrameMenu[PMMENU_RESTOREBUTTON]);
    12851327                 }
    12861328             }
Note: See TracChangeset for help on using the changeset viewer.