, int nType
)
{
-#ifndef __EMX__
+#if defined(__VISAGECPP__)
long lrc;
// UPM procs return 0 on success
lrc = U32ELOCU((unsigned char*)zBuf, (unsigned long *)&nType);
// Return TRUE if we have a colour display
bool wxColourDisplay()
{
+#if 0
HPS hpsScreen;
HDC hdcScreen;
LONG lColors;
hdcScreen = ::GpiQueryDevice(hpsScreen);
::DevQueryCaps(hdcScreen, CAPS_COLORS, 1L, &lColors);
return(lColors > 1L);
+#else
+ // I don't see how the PM display could not be color. Besides, this
+ // was leaking DCs and PSs!!! MN
+ return TRUE;
+#endif
}
// Returns depth of screen
HDC hdcScreen;
LONG lPlanes;
LONG lBitsPerPixel;
- LONG nDepth;
-
- hpsScreen = ::WinGetScreenPS(HWND_DESKTOP);
- hdcScreen = ::GpiQueryDevice(hpsScreen);
- ::DevQueryCaps(hdcScreen, CAPS_COLOR_PLANES, 1L, &lPlanes);
- ::DevQueryCaps(hdcScreen, CAPS_COLOR_BITCOUNT, 1L, &lBitsPerPixel);
-
- nDepth = (int)(lPlanes * lBitsPerPixel);
- DevCloseDC(hdcScreen);
+ static LONG nDepth = 0;
+
+ // The screen colordepth ain't gonna change. No reason to query
+ // it over and over!
+ if (!nDepth) {
+ hpsScreen = ::WinGetScreenPS(HWND_DESKTOP);
+ hdcScreen = ::GpiQueryDevice(hpsScreen);
+ ::DevQueryCaps(hdcScreen, CAPS_COLOR_PLANES, 1L, &lPlanes);
+ ::DevQueryCaps(hdcScreen, CAPS_COLOR_BITCOUNT, 1L, &lBitsPerPixel);
+
+ nDepth = (int)(lPlanes * lBitsPerPixel);
+ ::DevCloseDC(hdcScreen);
+ ::WinReleasePS(hpsScreen);
+ }
return (nDepth);
}
{
HPS hpsScreen;
HDC hdcScreen;
- LONG lWidth;
- LONG lHeight;
-
- hpsScreen = ::WinGetScreenPS(HWND_DESKTOP);
- hdcScreen = ::GpiQueryDevice(hpsScreen);
- ::DevQueryCaps(hdcScreen, CAPS_WIDTH, 1L, &lWidth);
- ::DevQueryCaps(hdcScreen, CAPS_HEIGHT, 1L, &lHeight);
- DevCloseDC(hdcScreen);
+ static LONG lWidth = 0;
+ static LONG lHeight = 0;
+
+ // The screen size ain't gonna change either so just cache the values
+ if (!lWidth) {
+ hpsScreen = ::WinGetScreenPS(HWND_DESKTOP);
+ hdcScreen = ::GpiQueryDevice(hpsScreen);
+ ::DevQueryCaps(hdcScreen, CAPS_WIDTH, 1L, &lWidth);
+ ::DevQueryCaps(hdcScreen, CAPS_HEIGHT, 1L, &lHeight);
+ ::DevCloseDC(hdcScreen);
+ ::WinReleasePS(hpsScreen);
+ }
*pWidth = (int)lWidth;
*pHeight = (int)lHeight;
}
,1L
,(PLONG)pHeight
);
+ ::DevCloseDC(hdcScreen);
+ ::WinReleasePS(hpsScreen);
}
void wxClientDisplayRect(int *x, int *y, int *width, int *height)