本文整理汇总了C++中ReleaseDC函数的典型用法代码示例。如果您正苦于以下问题:C++ ReleaseDC函数的具体用法?C++ ReleaseDC怎么用?C++ ReleaseDC使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ReleaseDC函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AppearancePage_OnInit
static INT_PTR
AppearancePage_OnInit(HWND hwndDlg)
{
INT iListIndex;
HWND hwndTheme;
GLOBALS *g;
RECT rcPreview;
HDC hdcScreen;
PTHEME pTheme;
g = (GLOBALS*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBALS));
if (g == NULL)
return FALSE;
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)g);
g->bInitializing = TRUE;
if (!LoadCurrentScheme(&g->Scheme))
return FALSE;
g->pThemes = LoadThemes();
if (g->pThemes)
{
BOOL bLoadedTheme = FALSE;
if (g_GlobalData.pwszAction &&
g_GlobalData.pwszFile &&
wcscmp(g_GlobalData.pwszAction, L"OpenMSTheme") == 0)
{
bLoadedTheme = FindOrAppendTheme(g->pThemes,
g_GlobalData.pwszFile,
NULL,
NULL,
&g->ActiveTheme);
}
if (bLoadedTheme)
{
g->bThemeChanged = TRUE;
g->bSchemeChanged = TRUE;
PostMessageW(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0);
AppearancePage_LoadSelectedScheme(hwndDlg, g);
}
else
{
if (!GetActiveTheme(g->pThemes, &g->ActiveTheme))
{
g->ActiveTheme.ThemeActive = FALSE;
}
}
/*
* Keep a copy of the selected classic theme in order to select this
* when user selects the classic theme (and not a horrible random theme )
*/
if (!GetActiveClassicTheme(g->pThemes, &g->ClassicTheme))
{
g->ClassicTheme.Theme = g->pThemes;
g->ClassicTheme.Color = g->pThemes->ColoursList;
g->ClassicTheme.Size = g->ClassicTheme.Color->ChildStyle;
}
if (g->ActiveTheme.ThemeActive == FALSE)
g->ActiveTheme = g->ClassicTheme;
GetClientRect(GetDlgItem(hwndDlg, IDC_APPEARANCE_PREVIEW), &rcPreview);
hdcScreen = GetDC(NULL);
g->hbmpThemePreview = CreateCompatibleBitmap(hdcScreen, rcPreview.right, rcPreview.bottom);
g->hdcThemePreview = CreateCompatibleDC(hdcScreen);
SelectObject(g->hdcThemePreview, g->hbmpThemePreview);
ReleaseDC(NULL, hdcScreen);
hwndTheme = GetDlgItem(hwndDlg, IDC_APPEARANCE_VISUAL_STYLE);
for (pTheme = g->pThemes; pTheme; pTheme = pTheme->NextTheme)
{
iListIndex = SendMessage(hwndTheme, CB_ADDSTRING, 0, (LPARAM)pTheme->DisplayName);
SendMessage(hwndTheme, CB_SETITEMDATA, iListIndex, (LPARAM)pTheme);
if (pTheme == g->ActiveTheme.Theme)
{
SendMessage(hwndTheme, CB_SETCURSEL, (WPARAM)iListIndex, 0);
}
}
if (g->ActiveTheme.Theme)
{
AppearancePage_ShowColorSchemes(hwndDlg, g);
AppearancePage_ShowSizes(hwndDlg, g);
AppearancePage_UpdateThemePreview(hwndDlg, g);
}
}
g->bInitializing = FALSE;
return FALSE;
}
示例2: ChangeDIBFormat
//.........这里部分代码省略.........
NewComp = BI_RGB;
}
else if (wBitCount == 4)
{
NewBPP = wBitCount;
if (dwCompression == BI_RGB || dwCompression == BI_RLE4)
NewComp = dwCompression;
else
return NULL;
}
else if (wBitCount == 8)
{
NewBPP = wBitCount;
if (dwCompression == BI_RGB || dwCompression == BI_RLE8)
NewComp = dwCompression;
else
return NULL;
}
else if (wBitCount == 24 && dwCompression == BI_RGB)
{
NewBPP = wBitCount;
NewComp = BI_RGB;
}
else
return NULL;
// Save the old DIB's palette
hPal = CreateDIBPalette(hDIB);
if (!hPal)
return NULL;
// Convert old DIB to a bitmap
hBitmap = DIBToBitmap(hDIB, hPal);
if (!hBitmap)
{
DeleteObject(hPal);
return NULL;
}
// Get info about the bitmap
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);
// Fill in the BITMAPINFOHEADER appropriately
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = Bitmap.bmWidth;
bi.biHeight = Bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = NewBPP;
bi.biCompression = NewComp;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
// Go allocate room for the new DIB
hNewDIB = AllocRoomForDIB(bi, hBitmap);
if (!hNewDIB)
return NULL;
// Get a pointer to the new DIB
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hNewDIB);
// Get a DC and select/realize our palette in it
hDC = GetDC(NULL);
hOldPal = SelectPalette(hDC, hPal, FALSE);
RealizePalette(hDC);
// Call GetDIBits and get the new DIB bits
if (!GetDIBits(hDC, hBitmap, 0, (UINT) lpbi->biHeight,
(LPSTR)lpbi + (WORD)lpbi->biSize + PaletteSize((LPSTR)lpbi),
(LPBITMAPINFO)lpbi, DIB_RGB_COLORS))
{
GlobalUnlock(hNewDIB);
GlobalFree(hNewDIB);
hNewDIB = NULL;
}
// Clean up and return
SelectPalette(hDC, hOldPal, TRUE);
RealizePalette(hDC);
ReleaseDC(NULL, hDC);
// Unlock the new DIB's memory block
if (hNewDIB)
GlobalUnlock(hNewDIB);
DeleteObject(hBitmap);
DeleteObject(hPal);
return hNewDIB;
}
示例3: WindowProc
//-----------------------------------WinProc-----------------------------
//
//-----------------------------------------------------------------------
LRESULT CALLBACK WindowProc(HWND hwnd,
UINT msg,
WPARAM wparam,
LPARAM lparam)
{
//these hold the dimensions of the client window area
static int cxClient, cyClient;
//used to create the back buffer
static HDC hdcBackBuffer;
static HBITMAP hBitmap;
static HBITMAP hOldBitmap;
switch(msg)
{
case WM_CREATE:
{
//seed the random number generator
srand((unsigned) time(NULL));
//get the size of the client window
RECT rect;
GetClientRect(hwnd, &rect);
cxClient = rect.right/2;
cyClient = rect.bottom/2;
//setup the controller
g_pController = new CController(hwnd);
//create a surface for us to render to(backbuffer)
hdcBackBuffer = CreateCompatibleDC(NULL);
HDC hdc = GetDC(hwnd);
hBitmap = CreateCompatibleBitmap(hdc,
cxClient,
cyClient);
ReleaseDC(hwnd, hdc);
hOldBitmap = (HBITMAP)SelectObject(hdcBackBuffer, hBitmap);
}
break;
//check key press messages
case WM_KEYUP:
{
switch(wparam)
{
case VK_ESCAPE:
{
PostQuitMessage(0);
}
break;
case 'F':
{
g_pController->FastRenderToggle();
}
break;
//reset the demo
case 'R':
{
if (g_pController)
{
delete g_pController;
}
//setup the new controller
g_pController = new CController(hwnd);
}
break;
}//end WM_KEYUP switch
}
break;
//has the user resized the client area?
case WM_SIZE:
{
cxClient = LOWORD(lparam);
cyClient = HIWORD(lparam);
//resize the backbuffer accordingly
SelectObject(hdcBackBuffer, hOldBitmap);
HDC hdc = GetDC(hwnd);
hBitmap = CreateCompatibleBitmap(hdc,
//.........这里部分代码省略.........
示例4: rect
void CMainDlg::DrawPhoto()
{
if (m_BitmapEx.IsValid())
{
//CBitmapEx m_PhotoBitmapEx;
//int tX,tY;
CDC *pDC = m_ctl_photo.GetDC();
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC, m_PhotoBitmapEx.GetWidth(), m_PhotoBitmapEx.GetHeight());
memDC.SelectObject(bmp);
CRect rect(0,0,m_PhotoBitmapEx.GetWidth(),m_PhotoBitmapEx.GetHeight());
CBrush bBlack(GetSysColor(COLOR_3DFACE));
memDC.FillRect(&rect, &bBlack);
m_PhotoBitmapEx.Draw(memDC);
pDC->FillRect(&m_PhotoRect, &bBlack);
pDC->SetStretchBltMode(HALFTONE);
pDC->StretchBlt(0,0,m_PhotoRect.Width(), m_PhotoRect.Height(),
&memDC,
0,0,
m_CutRect.Width(), m_CutRect.Height(),
SRCCOPY);
/*CDC *pDC = m_ctl_photo.GetDC();
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC, m_PhotoBitmapEx.GetWidth(), m_PhotoBitmapEx.GetHeight());
memDC.SelectObject(bmp);
CRect rect(0,0,m_PhotoBitmapEx.GetWidth(),m_PhotoBitmapEx.GetHeight());
CBrush bBlack(GetSysColor(COLOR_3DFACE));
memDC.FillRect(&rect, &bBlack);
m_PhotoBitmapEx.Draw(memDC);
pDC->FillRect(&m_PhotoRect, &bBlack);
pDC->SetStretchBltMode(HALFTONE);
pDC->StretchBlt(0,0,m_PhotoRect.Width(), m_PhotoRect.Height(),
&memDC,
0,0,
m_PhotoBitmapEx.GetWidth(), m_PhotoBitmapEx.GetHeight(),
SRCCOPY);*/
memDC.DeleteDC();
ReleaseDC(pDC);
}
else
{
CDC *pDC = m_ctl_photo.GetDC();
CBrush bBlack(GetSysColor(COLOR_3DFACE));
pDC->FillRect(m_PhotoRect,&bBlack);
}
}
示例5: ChangeBitmapFormat
//.........这里部分代码省略.........
if (NewComp == BI_RLE4)
NewBPP = 4;
else if (NewComp == BI_RLE8)
NewBPP = 8;
else // Not enough info */
return NULL;
}
else if (wBitCount == 1 && dwCompression == BI_RGB)
{
NewBPP = wBitCount;
NewComp = BI_RGB;
}
else if (wBitCount == 4)
{
NewBPP = wBitCount;
if (dwCompression == BI_RGB || dwCompression == BI_RLE4)
NewComp = dwCompression;
else
return NULL;
}
else if (wBitCount == 8)
{
NewBPP = wBitCount;
if (dwCompression == BI_RGB || dwCompression == BI_RLE8)
NewComp = dwCompression;
else
return NULL;
}
else if (wBitCount == 24 && dwCompression == BI_RGB)
{
NewBPP = wBitCount;
NewComp = BI_RGB;
}
else
return NULL;
// Get info about the bitmap
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);
// Fill in the BITMAPINFOHEADER appropriately
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = Bitmap.bmWidth;
bi.biHeight = Bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = NewBPP;
bi.biCompression = NewComp;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
// Go allocate room for the new DIB
hNewDIB = AllocRoomForDIB(bi, hBitmap);
if (!hNewDIB)
return NULL;
// Get a pointer to the new DIB
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hNewDIB);
// If we have a palette, get a DC and select/realize it
if (hPal)
{
hDC = GetDC(NULL);
hOldPal = SelectPalette(hDC, hPal, FALSE);
RealizePalette(hDC);
}
// Call GetDIBits and get the new DIB bits
if (!GetDIBits(hDC, hBitmap, 0, (UINT) lpbi->biHeight, (LPSTR)lpbi +
(WORD)lpbi->biSize + PaletteSize((LPSTR)lpbi), (LPBITMAPINFO)lpbi,
DIB_RGB_COLORS))
{
GlobalUnlock(hNewDIB);
GlobalFree(hNewDIB);
hNewDIB = NULL;
}
// Clean up and return
if (hOldPal)
{
SelectPalette(hDC, hOldPal, TRUE);
RealizePalette(hDC);
ReleaseDC(NULL, hDC);
}
// Unlock the new DIB's memory block
if (hNewDIB)
GlobalUnlock(hNewDIB);
return hNewDIB;
}
示例6: WndProc
LRESULT CALLBACK WndProc (HWND hwnd, UINT Message,
WPARAM wParam, LPARAM lParam)
{
int response;
HDC hdc;
PAINTSTRUCT paintstruct;
static unsigned k = 0;
switch (Message)
{
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDM_COM1:
cc.dwSize = sizeof(COMMCONFIG);
cc.wVersion = 0x100;
GetCommConfig (hComm, &cc, &cc.dwSize);
if (!CommConfigDialog (lpszCommName, hwnd, &cc))
break;
break;
case IDM_COM2:
cc.dwSize = sizeof(COMMCONFIG);
cc.wVersion = 0x100;
GetCommConfig (hComm, &cc, &cc.dwSize);
if (!CommConfigDialog (lpszCommName, hwnd, &cc))
break;
break;
}
break;
case WM_RBUTTONDOWN: // Process right button
response = MessageBox (hwnd, "Press One:", "Right Button",
MB_ABORTRETRYIGNORE);
switch (response)
{
case IDABORT:
MessageBox (hwnd, "", "Abort", MB_OK);
break;
case IDRETRY:
MessageBox (hwnd, "", "Retry", MB_OK);
break;
case IDIGNORE:
MessageBox (hwnd, "", "Ignore", MB_OK);
break;
}
break;
case WM_LBUTTONDOWN: // Process left button
response = MessageBox (hwnd, "Conitnue?", "Left Button",
MB_ICONHAND | MB_YESNO);
switch (response)
{
case IDYES:
MessageBox (hwnd, "Press Button", "Yes", MB_OK);
break;
case IDNO:
MessageBox (hwnd, "Press Button", "No", MB_OK);
break;
}
break;
case WM_CHAR: // Process keystroke
hdc = GetDC (hwnd); // get device context
sprintf (str, "%c", (char) wParam); // Convert char to string
TextOut (hdc, 10*k, 0, str, strlen (str)); // output character
k++; // increment the screen x-coordinate
ReleaseDC (hwnd, hdc); // Release device context
break;
case WM_PAINT: // Process a repaint message
hdc = BeginPaint (hwnd, &paintstruct); // Acquire DC
TextOut (hdc, 0, 0, str, strlen (str)); // output character
EndPaint (hwnd, &paintstruct); // Release DC
break;
case WM_DESTROY: // Terminate program
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, Message, wParam, lParam);
}
return 0;
}
示例7: mswin_display_RIP_window
void mswin_display_RIP_window (HWND hWnd)
{
MSG msg;
RECT rt;
PNHRIPWindow data;
HWND mapWnd;
RECT riprt;
RECT clientrect;
RECT textrect;
HDC hdc;
HFONT OldFont;
data = (PNHRIPWindow)GetWindowLong(hWnd, GWL_USERDATA);
GetNHApp()->hPopupWnd = hWnd;
mapWnd = mswin_hwnd_from_winid(WIN_MAP);
if( !IsWindow(mapWnd) ) mapWnd = GetNHApp()->hMainWnd;
GetWindowRect(mapWnd, &rt);
GetWindowRect(hWnd, &riprt);
GetClientRect (hWnd, &clientrect);
textrect = clientrect;
textrect.top += RIP_OFFSET_Y;
textrect.left += RIP_OFFSET_X;
textrect.right -= RIP_OFFSET_X;
if (data->window_text)
{
hdc = GetDC (hWnd);
OldFont = SelectObject (hdc, mswin_get_font(NHW_TEXT, 0, hdc, FALSE));
DrawText (hdc, data->window_text, strlen(data->window_text), &textrect,
DT_LEFT | DT_NOPREFIX | DT_CALCRECT);
SelectObject (hdc, OldFont);
ReleaseDC(hWnd, hdc);
}
if (textrect.right - textrect.left > RIP_WIDTH)
clientrect.right = textrect.right + RIP_OFFSET_X - clientrect.right;
else
clientrect.right = textrect.left + 2 * RIP_OFFSET_X + RIP_WIDTH - clientrect.right;
clientrect.bottom = textrect.bottom + RIP_HEIGHT + RIP_OFFSET_Y - clientrect.bottom;
GetWindowRect (GetDlgItem(hWnd, IDOK), &textrect);
textrect.right -= textrect.left;
textrect.bottom -= textrect.top;
clientrect.bottom += textrect.bottom + RIP_OFFSET_Y;
riprt.right -= riprt.left;
riprt.bottom -= riprt.top;
riprt.right += clientrect.right;
riprt.bottom += clientrect.bottom;
rt.left += (rt.right - rt.left - riprt.right) / 2;
rt.top += (rt.bottom - rt.top - riprt.bottom) / 2;
MoveWindow(hWnd, rt.left, rt.top, riprt.right, riprt.bottom, TRUE);
GetClientRect (hWnd, &clientrect);
MoveWindow (GetDlgItem(hWnd, IDOK),
(clientrect.right - clientrect.left - textrect.right) / 2,
clientrect.bottom - textrect.bottom - RIP_OFFSET_Y, textrect.right, textrect.bottom, TRUE);
ShowWindow(hWnd, SW_SHOW);
while( IsWindow(hWnd) &&
GetMessage(&msg, NULL, 0, 0)!=0 ) {
if( !IsDialogMessage(hWnd, &msg) ) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
GetNHApp()->hPopupWnd = NULL;
}
示例8: preview_proc
LRESULT CALLBACK preview_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
HWND hMainWnd = GetParent(hWnd);
HWND hEditorWnd = GetDlgItem(hMainWnd, IDC_EDITOR);
FORMATRANGE fr;
GETTEXTLENGTHEX gt = {GTL_DEFAULT, 1200};
HDC hdc = GetDC(hWnd);
HDC hdcTarget = make_dc();
fr.rc = preview.rcPage = get_print_rect(hdcTarget);
preview.rcPage.bottom += margins.bottom;
preview.rcPage.right += margins.right;
preview.rcPage.top = preview.rcPage.left = 0;
fr.rcPage = preview.rcPage;
preview.bmSize.cx = twips_to_pixels(preview.rcPage.right, GetDeviceCaps(hdc, LOGPIXELSX));
preview.bmSize.cy = twips_to_pixels(preview.rcPage.bottom, GetDeviceCaps(hdc, LOGPIXELSY));
preview.textlength = SendMessageW(hEditorWnd, EM_GETTEXTLENGTHEX, (WPARAM)>, 0);
fr.hdc = CreateCompatibleDC(hdc);
fr.hdcTarget = hdcTarget;
fr.chrg.cpMin = 0;
fr.chrg.cpMax = preview.textlength;
DeleteDC(fr.hdc);
DeleteDC(hdcTarget);
ReleaseDC(hWnd, hdc);
update_preview_sizes(hWnd, TRUE);
update_preview(hMainWnd);
break;
}
case WM_PAINT:
return print_preview(hWnd);
case WM_SIZE:
{
update_preview_sizes(hWnd, FALSE);
InvalidateRect(hWnd, NULL, FALSE);
break;
}
case WM_VSCROLL:
case WM_HSCROLL:
{
SCROLLINFO si;
RECT rc;
int nBar = (msg == WM_VSCROLL) ? SB_VERT : SB_HORZ;
int origPos;
GetClientRect(hWnd, &rc);
si.cbSize = sizeof(si);
si.fMask = SIF_ALL;
GetScrollInfo(hWnd, nBar, &si);
origPos = si.nPos;
switch(LOWORD(wParam))
{
case SB_TOP: /* == SB_LEFT */
si.nPos = si.nMin;
break;
case SB_BOTTOM: /* == SB_RIGHT */
si.nPos = si.nMax;
break;
case SB_LINEUP: /* == SB_LINELEFT */
si.nPos -= si.nPage / 10;
break;
case SB_LINEDOWN: /* == SB_LINERIGHT */
si.nPos += si.nPage / 10;
break;
case SB_PAGEUP: /* == SB_PAGELEFT */
si.nPos -= si.nPage;
break;
case SB_PAGEDOWN: /* SB_PAGERIGHT */
si.nPos += si.nPage;
break;
case SB_THUMBTRACK:
si.nPos = si.nTrackPos;
break;
}
si.fMask = SIF_POS;
SetScrollInfo(hWnd, nBar, &si, TRUE);
GetScrollInfo(hWnd, nBar, &si);
if (si.nPos != origPos)
{
int amount = origPos - si.nPos;
if (msg == WM_VSCROLL)
ScrollWindow(hWnd, 0, amount, NULL, NULL);
else
ScrollWindow(hWnd, amount, 0, NULL, NULL);
}
return 0;
}
case WM_SETCURSOR:
{
//.........这里部分代码省略.........
示例9: mprintf
std::unique_ptr<os::Viewport> MFCGraphicsOperations::createViewport(const os::ViewPortProperties& props)
{
int PixelFormat;
PIXELFORMATDESCRIPTOR pfd_test;
PIXELFORMATDESCRIPTOR GL_pfd;
mprintf((" Initializing WGL...\n"));
memset(&GL_pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
memset(&pfd_test, 0, sizeof(PIXELFORMATDESCRIPTOR));
GL_pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
GL_pfd.nVersion = 1;
GL_pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER;
if (props.enable_opengl)
{
GL_pfd.dwFlags |= PFD_SUPPORT_OPENGL;
}
GL_pfd.iPixelType = PFD_TYPE_RGBA;
GL_pfd.cColorBits = (BYTE)(props.pixel_format.red_size + props.pixel_format.green_size + props.pixel_format.blue_size + props.pixel_format.alpha_size);
GL_pfd.cRedBits = (BYTE)(props.pixel_format.red_size);
GL_pfd.cGreenBits = (BYTE)(props.pixel_format.green_size);
GL_pfd.cBlueBits = (BYTE)(props.pixel_format.blue_size);
GL_pfd.cAlphaBits = (BYTE)(props.pixel_format.alpha_size);
GL_pfd.cDepthBits = (BYTE)(props.pixel_format.depth_size);
GL_pfd.cStencilBits = (BYTE)(props.pixel_format.stencil_size);
Assert(_windowHandle != NULL);
auto device_context = GetDC(_windowHandle);
if (!device_context)
{
mprintf(("Unable to get device context for OpenGL W32!\n"));
return nullptr;
}
PixelFormat = ChoosePixelFormat(device_context, &GL_pfd);
if (!PixelFormat)
{
mprintf(("Unable to choose pixel format for OpenGL W32!\n"));
ReleaseDC(_windowHandle, device_context);
return nullptr;
}
else
{
DescribePixelFormat(device_context, PixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd_test);
}
if (!SetPixelFormat(device_context, PixelFormat, &GL_pfd))
{
mprintf(("Unable to set pixel format for OpenGL W32!\n"));
ReleaseDC(_windowHandle, device_context);
return nullptr;
}
mprintf((" Requested SDL Video values = R: %d, G: %d, B: %d, depth: %d, stencil: %d\n",
props.pixel_format.red_size, props.pixel_format.green_size, props.pixel_format.blue_size,
props.pixel_format.depth_size, props.pixel_format.stencil_size));
return std::unique_ptr<os::Viewport>(new MFCViewport(_windowHandle, device_context));
}
示例10: MoveWindow
//运行函数
bool CFlowerEffectThread::OnEventThreadRun()
{
//加载图片
CPngImage ImageFlower;
CString strInfo=TEXT("GIFT_"),strImage;
strImage.Format(TEXT("%s%ld"),strInfo,m_wFlowerID/2+1);
ImageFlower.LoadImage(GetModuleHandle(PROPERTY_MODULE_DLL_NAME),strImage);
if(ImageFlower.IsNull())return false;
//窗体大小
CRect ClientRect;
::GetWindowRect(m_hFlowerEffectControl, &ClientRect);
//绘画大小
int nCartoonWidth = 150;
int nCartoonCount = ImageFlower.GetWidth() / nCartoonWidth;
//过虑散频
MoveWindow(m_hFlowerEffectControl,0,0,0,0,false);
::ShowWindow(m_hFlowerEffectControl, SW_SHOW);
//绘画图片
for ( int nCartoonIndex=0; nCartoonIndex < nCartoonCount; ++nCartoonIndex )
{
//设备句柄
HDC hDC=GetDC(m_hFlowerEffectControl);
if ( hDC==NULL ) return false;
//系上D C
CDC TempDC;
TempDC.Attach(hDC);
//内存设备
CDC *pMemoryDC = CDC::FromHandle(m_ImageBuffer.GetDC());
CDC *pScreenDC = CDC::FromHandle(m_ImageBufferScreen.GetDC());
//绘画背景
pMemoryDC->BitBlt(0,0,ClientRect.Width(),ClientRect.Height(),pScreenDC,0,0,SRCCOPY);
//绘画礼物
ImageFlower.DrawImage(pMemoryDC, 0, 0, ClientRect.Width(), ClientRect.Height(),
nCartoonWidth * nCartoonIndex,0,nCartoonWidth, ImageFlower.GetHeight());
TempDC.BitBlt(0, 0, ClientRect.Width(), ClientRect.Height(), pMemoryDC, 0, 0, SRCCOPY);
//显示窗体
if (nCartoonIndex==0) MoveWindow(m_hFlowerEffectControl,ClientRect.left,ClientRect.top,ClientRect.Width(),ClientRect.Height(),false);
//释放设备
TempDC.Detach();
ReleaseDC(m_hFlowerEffectControl, hDC);
hDC=NULL;
m_ImageBuffer.ReleaseDC();
m_ImageBufferScreen.ReleaseDC();
pMemoryDC=NULL;
//线程睡眠
Sleep(120);
}
//隐藏窗体
::ShowWindow(m_hFlowerEffectControl, SW_HIDE);
return false;
}
示例11: GetSoftDataByID
LRESULT CBeikeSafeSoftmgrNecessHandler::OnListBoxGetDispInfo( LPNMHDR pnmh )
{
BKLBMGETDISPINFO* pdi = (BKLBMGETDISPINFO*)pnmh;
if ( pdi->nListItemID >= m_arrRightList.GetSize() )
return 0;
NECESS_SOFT_LIST_DATA& datalist = m_arrRightList[pdi->nListItemID];
if (datalist.bTitle)
{
// 标题的绘制
pdi->nHeight = SOFT_LIST_TITLE_HEIGHT;
m_necessList->SetItemVisible(IDC_SOFTMGR_LISTTMP_DIV_TITLE,TRUE);
m_necessList->SetItemVisible(IDC_SOFTMGR_LISTTMP_DIV_ITEM,FALSE);
m_necessList->SetItemText(IDC_SOFTMGR_LISTTMP_TXT_TITLE_NAME,datalist.strTitleName);
}
else
{
// 里面软件list的绘制
pdi->nHeight = SOFT_LIST_ITEM_HEIGHT;
m_necessList->SetItemVisible(IDC_SOFTMGR_LISTTMP_DIV_TITLE,FALSE);
m_necessList->SetItemVisible(IDC_SOFTMGR_LISTTMP_DIV_ITEM,TRUE);
m_necessList->SetItemAttribute(IDC_SOFTMGR_LISTTMP_DIV_ITEM,"crbg",pdi->bSelect?"EBF5FF":"FFFFFF");
CSoftListItemData* pSoftData = GetSoftDataByID(datalist.strSoftId);
int nPosX = 0;
Gdiplus::Image *pImage = NULL;
{
CDC dcx = GetDC(m_pMainDlg->m_hWnd);
HFONT hFntTmp;
int nTypeWidth = 0;
if (m_bShowType)
{
hFntTmp = dcx.SelectFont(BkFontPool::GetFont(BKF_DEFAULTFONT));
CRect rcType;
CString strType;
strType.Format(L"[%s]", pSoftData->m_strTypeShort);
dcx.DrawText(strType, -1, &rcType, DT_VCENTER | DT_SINGLELINE | DT_CALCRECT);
nTypeWidth = rcType.Width();
dcx.SelectFont(hFntTmp);
}
hFntTmp = dcx.SelectFont(BkFontPool::GetFont(BKF_BOLDFONT));
CRect rcProb;
dcx.DrawText(pSoftData->m_strName, -1, &rcProb, DT_VCENTER | DT_SINGLELINE | DT_CALCRECT);
dcx.SelectFont(hFntTmp);
ReleaseDC(m_pMainDlg->m_hWnd, dcx);
CRect rcWin;
GetWindowRect(m_necessList->m_hWnd, &rcWin);
int nLablesWidth = 0;
if ((pSoftData->m_attri&SA_Green) == SA_Green)
{
pImage = BkPngPool::Get(IDP_SOFTMGR_GREEN_SOFT);
nLablesWidth += pImage->GetWidth();
}
if (pSoftData->m_bCharge == TRUE)
{
if (nLablesWidth != 0)
nLablesWidth += 2;
pImage = BkPngPool::Get(IDP_SOFTMGR_CHARGE_SOFT);
nLablesWidth += pImage->GetWidth();
}
if (pSoftData->m_bPlug == TRUE)
{
if (nLablesWidth != 0)
nLablesWidth += 2;
pImage = BkPngPool::Get(IDP_SOFTMGR_PLUGIN_SOFT);
nLablesWidth += pImage->GetWidth();
}
if ((pSoftData->m_attri&SA_New) == SA_New)
{
if (nLablesWidth != 0)
nLablesWidth += 2;
pImage = BkPngPool::Get(IDP_SOFTMGR_NEW_SOFT);
nLablesWidth += pImage->GetWidth();
}
int nLeft = 50 + nTypeWidth;
nPosX = rcWin.Width() - 310 - nLablesWidth;
if (rcProb.Width() < rcWin.Width() - 310 - nLablesWidth - nLeft)
nPosX = nLeft + rcProb.Width();
CStringA strPosA;
strPosA.Format("%d,12,%d,27", nLeft, nPosX);
m_necessList->SetItemAttribute(IDC_SOFTMGR_LISTTMP_TXT_SOFT_TITLE, "pos", strPosA);
if (m_bShowType)
{
CString strTypeShort;
//.........这里部分代码省略.........
示例12: Sys_CreateConsole
/*
** Sys_CreateConsole
*/
void Sys_CreateConsole( void )
{
HDC hDC;
WNDCLASS wc;
RECT rect;
const char *DEDCLASS = "Q3 WinConsole";
int nHeight;
int swidth, sheight;
int DEDSTYLE = WS_POPUPWINDOW | WS_CAPTION | WS_MINIMIZEBOX;
memset( &wc, 0, sizeof( wc ) );
wc.style = 0;
wc.lpfnWndProc = (WNDPROC) ConWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = g_wv.hInstance;
wc.hIcon = LoadIcon( g_wv.hInstance, MAKEINTRESOURCE(IDI_ICON1));
wc.hCursor = LoadCursor (NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.lpszMenuName = 0;
wc.lpszClassName = DEDCLASS;
if ( !RegisterClass (&wc) )
return;
rect.left = 0;
rect.right = 540;
rect.top = 0;
rect.bottom = 450;
AdjustWindowRect( &rect, DEDSTYLE, FALSE );
hDC = GetDC( GetDesktopWindow() );
swidth = GetDeviceCaps( hDC, HORZRES );
sheight = GetDeviceCaps( hDC, VERTRES );
ReleaseDC( GetDesktopWindow(), hDC );
s_wcd.windowWidth = rect.right - rect.left + 1;
s_wcd.windowHeight = rect.bottom - rect.top + 1;
s_wcd.hWnd = CreateWindowEx( 0,
DEDCLASS,
CONSOLE_WINDOW_TITLE,
DEDSTYLE,
( swidth - 600 ) / 2, ( sheight - 450 ) / 2 , rect.right - rect.left + 1, rect.bottom - rect.top + 1,
NULL,
NULL,
g_wv.hInstance,
NULL );
if ( s_wcd.hWnd == NULL )
{
return;
}
//
// create fonts
//
hDC = GetDC( s_wcd.hWnd );
nHeight = -MulDiv( 8, GetDeviceCaps( hDC, LOGPIXELSY), 72);
s_wcd.hfBufferFont = CreateFont( nHeight,
0,
0,
0,
FW_LIGHT,
0,
0,
0,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
FF_MODERN | FIXED_PITCH,
"Courier New" );
ReleaseDC( s_wcd.hWnd, hDC );
//
// create the input line
//
s_wcd.hwndInputLine = CreateWindow( "edit", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER |
ES_LEFT | ES_AUTOHSCROLL,
6, 400, 528, 20,
s_wcd.hWnd,
( HMENU ) INPUT_ID, // child window ID
g_wv.hInstance, NULL );
//
// create the buttons
//
s_wcd.hwndButtonCopy = CreateWindow( "button", NULL, BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
5, 425, 72, 24,
s_wcd.hWnd,
( HMENU ) COPY_ID, // child window ID
g_wv.hInstance, NULL );
SendMessage( s_wcd.hwndButtonCopy, WM_SETTEXT, 0, ( LPARAM ) "copy" );
//.........这里部分代码省略.........
示例13: RichUtil_Proc
static LRESULT CALLBACK RichUtil_Proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
TRichUtil *ru;
EnterCriticalSection(&csRich);
ru = rlist_find(slist, hwnd);
LeaveCriticalSection(&csRich);
switch(msg) {
case WM_THEMECHANGED:
case WM_STYLECHANGED:
{
RichUtil_ClearUglyBorder(ru);
break;
}
case WM_NCPAINT:
{
LRESULT ret = CallWindowProc(ru->origProc, hwnd, msg, wParam, lParam);
if (ru->hasUglyBorder&&MyIsThemeActive()) {
HANDLE hTheme = MyOpenThemeData(ru->hwnd, L"EDIT");
if (hTheme) {
RECT rcBorder;
RECT rcClient;
int nState;
HDC hdc = GetWindowDC(ru->hwnd);
GetWindowRect(hwnd, &rcBorder);
rcBorder.right -= rcBorder.left; rcBorder.bottom -= rcBorder.top;
rcBorder.left = rcBorder.top = 0;
CopyRect(&rcClient, &rcBorder);
rcClient.left += ru->rect.left;
rcClient.top += ru->rect.top;
rcClient.right -= ru->rect.right;
rcClient.bottom -= ru->rect.bottom;
ExcludeClipRect(hdc, rcClient.left, rcClient.top, rcClient.right, rcClient.bottom);
if(MyIsThemeBackgroundPartiallyTransparent(hTheme, EP_EDITTEXT, ETS_NORMAL))
MyDrawThemeParentBackground(hwnd, hdc, &rcBorder);
if(!IsWindowEnabled(hwnd))
nState = ETS_DISABLED;
else if(SendMessage(hwnd, EM_GETOPTIONS, 0, 0) & ECO_READONLY)
nState = ETS_READONLY;
else nState = ETS_NORMAL;
MyDrawThemeBackground(hTheme, hdc, EP_EDITTEXT, nState, &rcBorder, NULL);
MyCloseThemeData(hTheme);
ReleaseDC(hwnd, hdc);
return 0;
}
}
return ret;
}
case WM_NCCALCSIZE:
{
LRESULT ret = CallWindowProc(ru->origProc, hwnd, msg, wParam, lParam);
NCCALCSIZE_PARAMS *ncsParam = (NCCALCSIZE_PARAMS*)lParam;
if (ru->hasUglyBorder&&MyIsThemeActive()) {
HANDLE hTheme = MyOpenThemeData(hwnd, L"EDIT");
if (hTheme) {
RECT rcClient;
HDC hdc = GetDC(GetParent(hwnd));
ZeroMemory(&rcClient, sizeof(RECT));
if(MyGetThemeBackgroundContentRect(hTheme, hdc, EP_EDITTEXT, ETS_NORMAL, &ncsParam->rgrc[0], &rcClient) == S_OK) {
ru->rect.left = rcClient.left-ncsParam->rgrc[0].left;
ru->rect.top = rcClient.top-ncsParam->rgrc[0].top;
ru->rect.right = ncsParam->rgrc[0].right-rcClient.right;
ru->rect.bottom = ncsParam->rgrc[0].bottom-rcClient.bottom;
CopyRect(&ncsParam->rgrc[0], &rcClient);
MyCloseThemeData(hTheme);
ReleaseDC(GetParent(hwnd), hdc);
return WVR_REDRAW;
}
ReleaseDC(GetParent(hwnd), hdc);
MyCloseThemeData(hTheme);
}
}
return ret;
}
case WM_ENABLE:
RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE|RDW_NOCHILDREN|RDW_UPDATENOW|RDW_FRAME);
break;
case WM_DESTROY:
{
LRESULT ret = CallWindowProc(ru->origProc, hwnd, msg, wParam, lParam);
if(IsWindow(hwnd)) {
if((WNDPROC)GetWindowLongPtr(hwnd, GWLP_WNDPROC) == &RichUtil_Proc)
SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)ru->origProc);
}
EnterCriticalSection(&csRich);
slist = rlist_remove(slist, ru);
LeaveCriticalSection(&csRich);
if (ru) free(ru);
return ret;
}
}
return CallWindowProc(ru->origProc, hwnd, msg, wParam, lParam);
}
示例14: startup_dlgproc
static INT_PTR CALLBACK startup_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static HBITMAP hbmp = NULL;
HDC hdc;
switch (uMsg) {
case WM_INITDIALOG: {
HWND hwnd;
RECT r, rdlg, chrome, rtab, rcancel, rstart;
int xoffset = 0, yoffset = 0;
// Fetch the positions (in screen coordinates) of all the windows we need to tweak
ZeroMemory(&chrome, sizeof(chrome));
AdjustWindowRect(&chrome, GetWindowLong(hwndDlg, GWL_STYLE), FALSE);
GetWindowRect(hwndDlg, &rdlg);
GetWindowRect(GetDlgItem(hwndDlg, WIN_STARTWIN_TABCTL), &rtab);
GetWindowRect(GetDlgItem(hwndDlg, WIN_STARTWIN_CANCEL), &rcancel);
GetWindowRect(GetDlgItem(hwndDlg, WIN_STARTWIN_START), &rstart);
// Knock off the non-client area of the main dialogue to give just the client area
rdlg.left -= chrome.left; rdlg.top -= chrome.top;
rdlg.right -= chrome.right; rdlg.bottom -= chrome.bottom;
// Translate them to client-relative coordinates wrt the main dialogue window
rtab.right -= rtab.left - 1; rtab.bottom -= rtab.top - 1;
rtab.left -= rdlg.left; rtab.top -= rdlg.top;
rcancel.right -= rcancel.left - 1; rcancel.bottom -= rcancel.top - 1;
rcancel.left -= rdlg.left; rcancel.top -= rdlg.top;
rstart.right -= rstart.left - 1; rstart.bottom -= rstart.top - 1;
rstart.left -= rdlg.left; rstart.top -= rdlg.top;
// And then convert the main dialogue coordinates to just width/length
rdlg.right -= rdlg.left - 1; rdlg.bottom -= rdlg.top - 1;
rdlg.left = 0; rdlg.top = 0;
// Load the bitmap into the bitmap control and fetch its dimensions
hbmp = LoadBitmap((HINSTANCE)win_gethinstance(), MAKEINTRESOURCE(RSRC_BMP));
hwnd = GetDlgItem(hwndDlg,WIN_STARTWIN_BITMAP);
SendMessage(hwnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp);
GetClientRect(hwnd, &r);
xoffset = r.right;
yoffset = r.bottom - rdlg.bottom;
// Shift and resize the controls that require it
rtab.left += xoffset; rtab.bottom += yoffset;
rcancel.left += xoffset; rcancel.top += yoffset;
rstart.left += xoffset; rstart.top += yoffset;
rdlg.right += xoffset;
rdlg.bottom += yoffset;
// Move the controls to their new positions
MoveWindow(GetDlgItem(hwndDlg, WIN_STARTWIN_TABCTL), rtab.left, rtab.top, rtab.right, rtab.bottom, FALSE);
MoveWindow(GetDlgItem(hwndDlg, WIN_STARTWIN_CANCEL), rcancel.left, rcancel.top, rcancel.right, rcancel.bottom, FALSE);
MoveWindow(GetDlgItem(hwndDlg, WIN_STARTWIN_START), rstart.left, rstart.top, rstart.right, rstart.bottom, FALSE);
// Move the main dialogue to the centre of the screen
hdc = GetDC(NULL);
rdlg.left = (GetDeviceCaps(hdc, HORZRES) - rdlg.right) / 2;
rdlg.top = (GetDeviceCaps(hdc, VERTRES) - rdlg.bottom) / 2;
ReleaseDC(NULL, hdc);
MoveWindow(hwndDlg, rdlg.left + chrome.left, rdlg.top + chrome.left,
rdlg.right + (-chrome.left+chrome.right), rdlg.bottom + (-chrome.top+chrome.bottom), TRUE);
// Add tabs to the tab control
{
TCITEM tab;
hwnd = GetDlgItem(hwndDlg, WIN_STARTWIN_TABCTL);
ZeroMemory(&tab, sizeof(tab));
tab.mask = TCIF_TEXT;
tab.pszText = TEXT("Configuration");
SendMessage(hwnd, TCM_INSERTITEM, (WPARAM)TAB_CONFIG, (LPARAM)&tab);
tab.mask = TCIF_TEXT;
tab.pszText = TEXT("Game");
SendMessage(hwnd, TCM_INSERTITEM, (WPARAM)TAB_GAME, (LPARAM)&tab);
tab.mask = TCIF_TEXT;
tab.pszText = TEXT("Messages");
SendMessage(hwnd, TCM_INSERTITEM, (WPARAM)TAB_MESSAGES, (LPARAM)&tab);
// Work out the position and size of the area inside the tab control for the pages
ZeroMemory(&r, sizeof(r));
GetClientRect(hwnd, &r);
SendMessage(hwnd, TCM_ADJUSTRECT, FALSE, (LPARAM)&r);
r.right -= r.left-1;
r.bottom -= r.top-1;
r.top += rtab.top;
r.left += rtab.left;
// Create the pages and position them in the tab control, but hide them
pages[TAB_CONFIG] = CreateDialog((HINSTANCE)win_gethinstance(),
MAKEINTRESOURCE(WIN_STARTWINPAGE_CONFIG), hwndDlg, ConfigPageProc);
pages[TAB_GAME] = CreateDialog((HINSTANCE)win_gethinstance(),
MAKEINTRESOURCE(WIN_STARTWINPAGE_GAME), hwndDlg, GamePageProc);
pages[TAB_MESSAGES] = GetDlgItem(hwndDlg, WIN_STARTWIN_MESSAGES);
SetWindowPos(pages[TAB_CONFIG], hwnd,r.left,r.top,r.right,r.bottom,SWP_HIDEWINDOW);
SetWindowPos(pages[TAB_GAME], hwnd,r.left,r.top,r.right,r.bottom,SWP_HIDEWINDOW);
SetWindowPos(pages[TAB_MESSAGES], hwnd,r.left,r.top,r.right,r.bottom,SWP_HIDEWINDOW);
//.........这里部分代码省略.........
示例15: Test_NtGdiGetRandomRgn
INT
Test_NtGdiGetRandomRgn(PTESTINFO pti)
{
HWND hWnd;
HDC hDC;
HRGN hrgn, hrgn2;
/* Create a window */
hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,
NULL, NULL, g_hInstance, 0);
// UpdateWindow(hWnd);
hDC = GetDC(hWnd);
ASSERT(hDC != NULL);
hrgn = CreateRectRgn(0,0,0,0);
hrgn2 = CreateRectRgn(3,3,10,10);
SetLastError(ERROR_SUCCESS);
RTEST(NtGdiGetRandomRgn(0, hrgn, 0) == -1);
RTEST(GetLastError() == ERROR_INVALID_HANDLE);
SetLastError(ERROR_SUCCESS);
RTEST(NtGdiGetRandomRgn((HDC)2345, hrgn, 1) == -1);
RTEST(GetLastError() == ERROR_INVALID_HANDLE);
SetLastError(ERROR_SUCCESS);
RTEST(NtGdiGetRandomRgn((HDC)2345, hrgn, 10) == -1);
RTEST(GetLastError() == ERROR_INVALID_HANDLE);
SetLastError(ERROR_SUCCESS);
RTEST(NtGdiGetRandomRgn((HDC)2345, (HRGN)10, 10) == -1);
RTEST(GetLastError() == ERROR_INVALID_HANDLE);
SetLastError(ERROR_SUCCESS);
RTEST(NtGdiGetRandomRgn((HDC)2345, 0, 1) == -1);
RTEST(GetLastError() == ERROR_INVALID_HANDLE);
SetLastError(ERROR_SUCCESS);
RTEST(NtGdiGetRandomRgn(hDC, 0, 0) == 0);
RTEST(NtGdiGetRandomRgn(hDC, 0, 1) == 0);
RTEST(NtGdiGetRandomRgn(hDC, (HRGN)-5, 0) == 0);
RTEST(NtGdiGetRandomRgn(hDC, (HRGN)-5, 1) == 0);
RTEST(NtGdiGetRandomRgn(hDC, hrgn, 0) == 0);
RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 0);
TEST(NtGdiGetRandomRgn(hDC, hrgn, 2) == 0);
RTEST(NtGdiGetRandomRgn(hDC, hrgn, 3) == 0);
RTEST(NtGdiGetRandomRgn(hDC, hrgn, 4) == 1);
RTEST(NtGdiGetRandomRgn(hDC, hrgn, 5) == 0);
RTEST(NtGdiGetRandomRgn(hDC, hrgn, 10) == 0);
RTEST(NtGdiGetRandomRgn(hDC, hrgn, -10) == 0);
RTEST(GetLastError() == ERROR_SUCCESS);
SelectClipRgn(hDC, hrgn2);
RTEST(NtGdiGetRandomRgn(hDC, 0, 1) == -1);
RTEST(GetLastError() == ERROR_SUCCESS);
RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 1);
RTEST(CombineRgn(hrgn, hrgn, hrgn, RGN_OR) == SIMPLEREGION);
RTEST(CombineRgn(hrgn, hrgn, hrgn2, RGN_XOR) == NULLREGION);
SetRectRgn(hrgn2,0,0,0,0);
SelectClipRgn(hDC, hrgn2);
RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 1);
RTEST(CombineRgn(hrgn2, hrgn, hrgn2, RGN_XOR) == NULLREGION);
RTEST(CombineRgn(hrgn2, hrgn, hrgn, RGN_OR) == NULLREGION);
SelectClipRgn(hDC, NULL);
RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 0);
RTEST(NtGdiGetRandomRgn(hDC, hrgn, 4) == 1);
RTEST(GetLastError() == ERROR_SUCCESS);
ReleaseDC(hWnd, hDC);
DestroyWindow(hWnd);
return APISTATUS_NORMAL;
}