本文整理汇总了C++中MapWindowPoints函数的典型用法代码示例。如果您正苦于以下问题:C++ MapWindowPoints函数的具体用法?C++ MapWindowPoints怎么用?C++ MapWindowPoints使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了MapWindowPoints函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: IPADDRESS_Draw
static LRESULT IPADDRESS_Draw (const IPADDRESS_INFO *infoPtr, HDC hdc)
{
static const WCHAR dotW[] = { '.', 0 };
RECT rect, rcPart;
COLORREF bgCol, fgCol;
HTHEME theme;
int i, state = ETS_NORMAL;
TRACE("\n");
GetClientRect (infoPtr->Self, &rect);
theme = OpenThemeData(infoPtr->Self, WC_EDITW);
if (theme) {
DWORD dwStyle = GetWindowLongW (infoPtr->Self, GWL_STYLE);
if (!infoPtr->Enabled)
state = ETS_DISABLED;
else if (dwStyle & ES_READONLY)
state = ETS_READONLY;
else if (GetFocus() == infoPtr->Self)
state = ETS_FOCUSED;
GetThemeColor(theme, EP_EDITTEXT, state, TMT_FILLCOLOR, &bgCol);
GetThemeColor(theme, EP_EDITTEXT, state, TMT_TEXTCOLOR, &fgCol);
if (IsThemeBackgroundPartiallyTransparent (theme, EP_EDITTEXT, state))
DrawThemeParentBackground(infoPtr->Self, hdc, &rect);
DrawThemeBackground (theme, hdc, EP_EDITTEXT, state, &rect, 0);
} else {
if (infoPtr->Enabled) {
bgCol = comctl32_color.clrWindow;
fgCol = comctl32_color.clrWindowText;
} else {
bgCol = comctl32_color.clr3dFace;
fgCol = comctl32_color.clrGrayText;
}
FillRect (hdc, &rect, (HBRUSH)(DWORD_PTR)(bgCol+1));
DrawEdge (hdc, &rect, EDGE_SUNKEN, BF_RECT | BF_ADJUST);
}
SetBkColor (hdc, bgCol);
SetTextColor(hdc, fgCol);
for (i = 0; i < 3; i++) {
GetWindowRect (infoPtr->Part[i].EditHwnd, &rcPart);
MapWindowPoints( 0, infoPtr->Self, (POINT *)&rcPart, 2 );
rect.left = rcPart.right;
GetWindowRect (infoPtr->Part[i+1].EditHwnd, &rcPart);
MapWindowPoints( 0, infoPtr->Self, (POINT *)&rcPart, 2 );
rect.right = rcPart.left;
if (theme)
DrawThemeText(theme, hdc, EP_EDITTEXT, state, dotW, 1, DT_SINGLELINE | DT_CENTER | DT_BOTTOM, 0, &rect);
else
DrawTextW(hdc, dotW, 1, &rect, DT_SINGLELINE | DT_CENTER | DT_BOTTOM);
}
if (theme)
CloseThemeData(theme);
return 0;
}
开发者ID:wine-mirror,项目名称:wine,代码行数:65,代码来源:ipaddress.c
示例2: PAGER_MouseMove
static LRESULT
PAGER_MouseMove (PAGER_INFO* infoPtr, INT keys, INT x, INT y)
{
POINT clpt, pt;
RECT wnrect, *btnrect = NULL;
BOOL topLeft = FALSE;
INT btnstate = 0;
INT hit;
HDC hdc;
pt.x = x;
pt.y = y;
TRACE("[%p] to (%d,%d)\n", infoPtr->hwndSelf, x, y);
ClientToScreen(infoPtr->hwndSelf, &pt);
GetWindowRect(infoPtr->hwndSelf, &wnrect);
if (PtInRect(&wnrect, pt)) {
RECT TLbtnrect, BRbtnrect;
PAGER_GetButtonRects(infoPtr, &TLbtnrect, &BRbtnrect, FALSE);
clpt = pt;
MapWindowPoints(0, infoPtr->hwndSelf, &clpt, 1);
hit = PAGER_HitTest(infoPtr, &clpt);
if ((hit == PGB_TOPORLEFT) && (infoPtr->TLbtnState == PGF_NORMAL))
{
topLeft = TRUE;
btnrect = &TLbtnrect;
infoPtr->TLbtnState = PGF_HOT;
btnstate = infoPtr->TLbtnState;
}
else if ((hit == PGB_BOTTOMORRIGHT) && (infoPtr->BRbtnState == PGF_NORMAL))
{
topLeft = FALSE;
btnrect = &BRbtnrect;
infoPtr->BRbtnState = PGF_HOT;
btnstate = infoPtr->BRbtnState;
}
/* If in one of the buttons the capture and draw buttons */
if (btnrect)
{
TRACE("[%p] draw btn (%s), Capture %s, style %08x\n",
infoPtr->hwndSelf, wine_dbgstr_rect(btnrect),
(infoPtr->bCapture) ? "TRUE" : "FALSE",
infoPtr->dwStyle);
if (!infoPtr->bCapture)
{
TRACE("[%p] SetCapture\n", infoPtr->hwndSelf);
SetCapture(infoPtr->hwndSelf);
infoPtr->bCapture = TRUE;
}
if (infoPtr->dwStyle & PGS_AUTOSCROLL)
SetTimer(infoPtr->hwndSelf, TIMERID1, 0x3e, 0);
hdc = GetWindowDC(infoPtr->hwndSelf);
/* OffsetRect(wnrect, 0 | 1, 0 | 1) */
PAGER_DrawButton(hdc, infoPtr->clrBk, *btnrect,
infoPtr->dwStyle & PGS_HORZ, topLeft, btnstate);
ReleaseDC(infoPtr->hwndSelf, hdc);
return 0;
}
}
/* If we think we are captured, then do release */
if (infoPtr->bCapture && (WindowFromPoint(pt) != infoPtr->hwndSelf))
{
NMHDR nmhdr;
infoPtr->bCapture = FALSE;
if (GetCapture() == infoPtr->hwndSelf)
{
ReleaseCapture();
if (infoPtr->TLbtnState == PGF_GRAYED)
{
infoPtr->TLbtnState = PGF_INVISIBLE;
SetWindowPos(infoPtr->hwndSelf, 0, 0, 0, 0, 0,
SWP_FRAMECHANGED | SWP_NOSIZE | SWP_NOMOVE |
SWP_NOZORDER | SWP_NOACTIVATE);
}
else if (infoPtr->TLbtnState == PGF_HOT)
{
infoPtr->TLbtnState = PGF_NORMAL;
/* FIXME: just invalidate button rect */
RedrawWindow(infoPtr->hwndSelf, NULL, NULL, RDW_FRAME | RDW_INVALIDATE);
}
if (infoPtr->BRbtnState == PGF_GRAYED)
{
infoPtr->BRbtnState = PGF_INVISIBLE;
SetWindowPos(infoPtr->hwndSelf, 0, 0, 0, 0, 0,
SWP_FRAMECHANGED | SWP_NOSIZE | SWP_NOMOVE |
SWP_NOZORDER | SWP_NOACTIVATE);
}
else if (infoPtr->BRbtnState == PGF_HOT)
{
infoPtr->BRbtnState = PGF_NORMAL;
/* FIXME: just invalidate button rect */
RedrawWindow(infoPtr->hwndSelf, NULL, NULL, RDW_FRAME | RDW_INVALIDATE);
}
//.........这里部分代码省略.........
开发者ID:pstrealer,项目名称:wine,代码行数:101,代码来源:pager.c
示例3: GetTrayNotifyWnd
//First tracking method: attaches to Tray process and reads data directly, is fast and reliable but will fail if user uses non standard tray software
//It was suggested by Neal Andrews with VB example: http://www.codeproject.com/shell/ctrayiconposition.asp?select=999036&forumid=14631&df=100#xx999036xx
//Ported to C++ by Ireneusz Zielinski
BOOL CTrayIconPosition::FindOutPositionOfIconDirectly(const HWND a_hWndOwner, const int a_iButtonID, CRect& a_rcIcon)
{
//first of all let's find a Tool bar control embed in Tray window
HWND hWndTray = GetTrayNotifyWnd(TRUE);
if (hWndTray == NULL)
{
return FALSE;
}
//now we have to get an ID of the parent process for system tray
DWORD dwTrayProcessID = -1;
GetWindowThreadProcessId(hWndTray, &dwTrayProcessID);
if(dwTrayProcessID <= 0)
{
return FALSE;
}
HANDLE hTrayProc = OpenProcess(PROCESS_ALL_ACCESS, 0, dwTrayProcessID);
if(hTrayProc == NULL)
{
return FALSE;
}
//now we check how many buttons is there - should be more than 0
int iButtonsCount = SendMessage(hWndTray, TB_BUTTONCOUNT, 0, 0);
//We want to get data from another process - it's not possible to just send messages like TB_GETBUTTON with a localy
//allocated buffer for return data. Pointer to localy allocated data has no usefull meaning in a context of another
//process (since Win95) - so we need to allocate some memory inside Tray process.
//We allocate sizeof(TBBUTTON) bytes of memory - because TBBUTTON is the biggest structure we will fetch. But this buffer
//will be also used to get smaller pieces of data like RECT structures.
LPVOID lpData = VirtualAllocEx(hTrayProc, NULL, sizeof(TBBUTTON), MEM_COMMIT, PAGE_READWRITE);
if( lpData == NULL || iButtonsCount < 1 )
{
CloseHandle(hTrayProc);
return FALSE;
}
BOOL bIconFound = FALSE;
for(int iButton=0; iButton<iButtonsCount; iButton++)
{
//first let's read TBUTTON information about each button in a task bar of tray
DWORD dwBytesRead = -1;
TBBUTTON buttonData;
SendMessage(hWndTray, TB_GETBUTTON, iButton, (LPARAM)lpData);
ReadProcessMemory(hTrayProc, lpData, &buttonData, sizeof(TBBUTTON), &dwBytesRead);
if(dwBytesRead < sizeof(TBBUTTON))
{
continue;
}
//now let's read extra data associated with each button: there will be a HWND of the window that created an icon and icon ID
DWORD dwExtraData[2] = { 0,0 };
ReadProcessMemory(hTrayProc, (LPVOID)buttonData.dwData, dwExtraData, sizeof(dwExtraData), &dwBytesRead);
if(dwBytesRead < sizeof(dwExtraData))
{
continue;
}
HWND hWndOfIconOwner = (HWND) dwExtraData[0];
int iIconId = (int) dwExtraData[1];
if(hWndOfIconOwner != a_hWndOwner || iIconId != a_iButtonID)
{
continue;
}
//we found our icon - in WinXP it could be hidden - let's check it:
if( buttonData.fsState & TBSTATE_HIDDEN )
{
break;
}
//now just ask a tool bar of rectangle of our icon
RECT rcPosition = {0,0};
SendMessage(hWndTray, TB_GETITEMRECT, iButton, (LPARAM)lpData);
ReadProcessMemory(hTrayProc, lpData, &rcPosition, sizeof(RECT), &dwBytesRead);
if(dwBytesRead < sizeof(RECT))
{
continue;
}
MapWindowPoints(hWndTray, NULL, (LPPOINT)&rcPosition, 2);
a_rcIcon = rcPosition;
bIconFound = TRUE;
break;
}
if(bIconFound == FALSE)
{
a_rcIcon = GetTrayWndRect(); //we failed to detect position of icon - let's return fail safe cooridinates of system tray
}
//.........这里部分代码省略.........
开发者ID:2Dou,项目名称:PlayBox,代码行数:101,代码来源:TrayIconPosition.cpp
示例4: SetGeneralInfo
void SetGeneralInfo(HWND hwnd)
{
TCHAR ach[256];
HWND hwndDlg = WinSpyTab[GENERAL_TAB].hwnd;
RECT rect;
int x1, y1;
int i, numbytes, index;
LONG_PTR lp;
DWORD dwLastError;
if(hwnd == 0) return;
//handle
wsprintf(ach, szHexFmt, hwnd);
SetDlgItemText(hwndDlg, IDC_HANDLE, ach);
//caption
ShowDlgItem(hwndDlg, IDC_CAPTION1, SW_SHOW);
ShowDlgItem(hwndDlg, IDC_CAPTION2, SW_HIDE);
SendDlgItemMessage(hwndDlg, IDC_CAPTION2, CB_RESETCONTENT, 0, 0);
if(!IsWindow(hwnd))
{
SetDlgItemText(hwndDlg, IDC_CAPTION1, L"(invalid window)"); // edit box
SetDlgItemText(hwndDlg, IDC_CAPTION2, L"(invalid window)"); // combo box
SetDlgItemText(hwndDlg, IDC_CLASS, L"(invalid window)");
return;
}
// SendMessage is better than GetWindowText,
// because it gets text of children in other processes
if(spy_fPassword == FALSE)
{
ach[0] = 0;
if(!SendMessageTimeout(hwnd, WM_GETTEXT, sizeof(ach) / sizeof(TCHAR), (LPARAM)ach,
SMTO_ABORTIFHUNG, 100, NULL))
{
GetWindowText(hwnd, ach, sizeof(ach) / sizeof(TCHAR));
}
SetDlgItemText(hwndDlg, IDC_CAPTION1, ach); // edit box
SetDlgItemText(hwndDlg, IDC_CAPTION2, ach); // combo box
}
else
{
SetDlgItemText(hwndDlg, IDC_CAPTION1, spy_szPassword); // edit box
SetDlgItemText(hwndDlg, IDC_CAPTION2, spy_szPassword); // combo box
}
//class name
GetClassName(hwnd, ach, sizeof(ach)/sizeof(TCHAR));
if(IsWindowUnicode(hwnd)) lstrcat(ach, _T(" (Unicode)"));
SetDlgItemText(hwndDlg, IDC_CLASS, ach);
//style
wsprintf(ach, szHexFmt, GetWindowLong(hwnd, GWL_STYLE));
if(IsWindowVisible(hwnd)) lstrcat(ach, _T(" (visible, "));
else lstrcat(ach, _T(" (hidden, "));
if(IsWindowEnabled(hwnd)) lstrcat(ach, _T("enabled)"));
else lstrcat(ach, _T("disabled)"));
SetDlgItemText(hwndDlg, IDC_STYLE, ach);
//rectangle
GetWindowRect(hwnd, &rect);
x1 = rect.left;
y1 = rect.top;
wsprintf(ach, _T("(%d,%d) - (%d,%d) - %dx%d"),
rect.left,rect.top, rect.right,rect.bottom,
(rect.right-rect.left), (rect.bottom-rect.top));
SetDlgItemText(hwndDlg, IDC_RECTANGLE, ach);
//client rect
GetClientRect(hwnd, &rect);
MapWindowPoints(hwnd, 0, (POINT *)&rect, 2);
x1 = rect.left-x1;
y1 = rect.top-y1;
OffsetRect(&rect, -rect.left, -rect.top);
OffsetRect(&rect, x1, y1);
wsprintf(ach, _T("(%d,%d) - (%d,%d) - %dx%d"),
rect.left,rect.top, rect.right,rect.bottom,
(rect.right-rect.left), (rect.bottom-rect.top));
SetDlgItemText(hwndDlg, IDC_CLIENTRECT, ach);
//restored rect
/*GetWindowPlacement(hwnd, &wp);
wsprintf(ach, _T("(%d,%d) - (%d,%d) - %dx%d"),
wp.rcNormalPosition.left, wp.rcNormalPosition.top,
wp.rcNormalPosition.right, wp.rcNormalPosition.bottom,
//.........这里部分代码省略.........
开发者ID:HoMeCracKeR,项目名称:winspy,代码行数:101,代码来源:DisplayGeneralInfo.c
示例5: swapchain_gl_present
static HRESULT swapchain_gl_present(struct wined3d_swapchain *swapchain, const RECT *src_rect_in,
const RECT *dst_rect_in, const RGNDATA *dirty_region, DWORD flags)
{
const struct wined3d_fb_state *fb = &swapchain->device->fb;
const struct wined3d_gl_info *gl_info;
struct wined3d_context *context;
RECT src_rect, dst_rect;
BOOL render_to_fbo;
context = context_acquire(swapchain->device, swapchain->back_buffers[0]);
if (!context->valid)
{
context_release(context);
WARN("Invalid context, skipping present.\n");
return WINED3D_OK;
}
gl_info = context->gl_info;
/* Render the cursor onto the back buffer, using our nifty directdraw blitting code :-) */
if (swapchain->device->bCursorVisible &&
swapchain->device->cursorTexture &&
!swapchain->device->hardwareCursor)
{
struct wined3d_surface cursor;
RECT destRect =
{
swapchain->device->xScreenSpace - swapchain->device->xHotSpot,
swapchain->device->yScreenSpace - swapchain->device->yHotSpot,
swapchain->device->xScreenSpace + swapchain->device->cursorWidth - swapchain->device->xHotSpot,
swapchain->device->yScreenSpace + swapchain->device->cursorHeight - swapchain->device->yHotSpot,
};
TRACE("Rendering the cursor. Creating fake surface at %p\n", &cursor);
/* Build a fake surface to call the Blitting code. It is not possible to use the interface passed by
* the application because we are only supposed to copy the information out. Using a fake surface
* allows to use the Blitting engine and avoid copying the whole texture -> render target blitting code.
*/
memset(&cursor, 0, sizeof(cursor));
cursor.resource.ref = 1;
cursor.resource.device = swapchain->device;
cursor.resource.pool = WINED3DPOOL_SCRATCH;
cursor.resource.format = wined3d_get_format(gl_info, WINED3DFMT_B8G8R8A8_UNORM);
cursor.resource.resourceType = WINED3DRTYPE_SURFACE;
cursor.texture_name = swapchain->device->cursorTexture;
cursor.texture_target = GL_TEXTURE_2D;
cursor.texture_level = 0;
cursor.resource.width = swapchain->device->cursorWidth;
cursor.resource.height = swapchain->device->cursorHeight;
/* The cursor must have pow2 sizes */
cursor.pow2Width = cursor.resource.width;
cursor.pow2Height = cursor.resource.height;
/* The surface is in the texture */
cursor.flags |= SFLAG_INTEXTURE;
/* DDBLT_KEYSRC will cause BltOverride to enable the alpha test with GL_NOTEQUAL, 0.0,
* which is exactly what we want :-)
*/
if (swapchain->presentParms.Windowed)
MapWindowPoints(NULL, swapchain->win_handle, (LPPOINT)&destRect, 2);
wined3d_surface_blt(swapchain->back_buffers[0], &destRect,
&cursor, NULL, WINEDDBLT_KEYSRC, NULL, WINED3DTEXF_POINT);
}
if (swapchain->device->logo_surface)
{
/* Blit the logo into the upper left corner of the drawable. */
wined3d_surface_bltfast(swapchain->back_buffers[0], 0, 0,
swapchain->device->logo_surface, NULL, WINEDDBLTFAST_SRCCOLORKEY);
}
TRACE("Presenting HDC %p.\n", context->hdc);
render_to_fbo = swapchain->render_to_fbo;
if (src_rect_in)
{
src_rect = *src_rect_in;
if (!render_to_fbo && (src_rect.left || src_rect.top
|| src_rect.right != swapchain->presentParms.BackBufferWidth
|| src_rect.bottom != swapchain->presentParms.BackBufferHeight))
{
render_to_fbo = TRUE;
}
}
else
{
src_rect.left = 0;
src_rect.top = 0;
src_rect.right = swapchain->presentParms.BackBufferWidth;
src_rect.bottom = swapchain->presentParms.BackBufferHeight;
}
if (dst_rect_in)
dst_rect = *dst_rect_in;
else
GetClientRect(swapchain->win_handle, &dst_rect);
if (!render_to_fbo && (dst_rect.left || dst_rect.top
|| dst_rect.right != swapchain->presentParms.BackBufferWidth
|| dst_rect.bottom != swapchain->presentParms.BackBufferHeight))
{
//.........这里部分代码省略.........
开发者ID:MichaelMcDonnell,项目名称:wine,代码行数:101,代码来源:swapchain.c
示例6: CheckOptionsFastProc
//.........这里部分代码省略.........
ExpandEnvStr(L"%APPDATA%\\ConEmu.xml"),
ExpandEnvStr(L"%ConEmuBaseDir%\\ConEmu.xml"),
ExpandEnvStr(L"%ConEmuDir%\\ConEmu.xml"),
NULL
};
int iAllowed = 0;
if (lstrcmp(Storage.szType, CONEMU_CONFIGTYPE_XML) == 0)
{
iAllowed = 1; // Реестр уже низя
if (Storage.pszFile)
{
if (lstrcmpi(Storage.pszFile, pszSettingsPlaces[1]) == 0)
iAllowed = 1; // OK, перебить может любой другой xml
else if (lstrcmpi(Storage.pszFile, pszSettingsPlaces[2]) == 0)
iAllowed = 2; // "Перебить" может только %APPDATA%
else if (lstrcmpi(Storage.pszFile, pszSettingsPlaces[3]) == 0)
iAllowed = 3; // Приоритетнее настроек нет
else
{
// Этот xml мог быть указан в "/LoadCfgFile ..."
SafeFree(pszSettingsPlaces[3]);
pszSettingsPlaces[3] = lstrdup(Storage.pszFile);
iAllowed = 3; // Приоритетнее настроек нет
}
}
}
while (pszSettingsPlaces[iAllowed])
{
SendDlgItemMessage(hDlg, lbStorageLocation, CB_ADDSTRING, 0, (LPARAM)pszSettingsPlaces[iAllowed]);
iAllowed++;
}
SendDlgItemMessage(hDlg, lbStorageLocation, CB_SETCURSEL, 0, 0);
for (int i = 0; pszSettingsPlaces[i]; i++)
{
SafeFree(pszSettingsPlaces[i]);
}
// continue
CheckDlgButton(hDlg, cbSingleInstance, gpSetCls->IsSingleInstanceArg());
CheckDlgButton(hDlg, cbUseKeyboardHooksFast, gpSet->isKeyboardHooks(true));
// Debug purposes only. ConEmu.exe switch "/nokeyhooks"
#ifdef _DEBUG
EnableWindow(GetDlgItem(hDlg, cbUseKeyboardHooksFast), !gpConEmu->DisableKeybHooks);
#endif
CheckDlgButton(hDlg, cbInjectConEmuHkFast, gpSet->isUseInjects);
if (!gpConEmu->isUpdateAllowed())
{
EnableWindow(GetDlgItem(hDlg, cbEnableAutoUpdateFast), FALSE);
EnableWindow(GetDlgItem(hDlg, rbAutoUpdateStableFast), FALSE);
EnableWindow(GetDlgItem(hDlg, rbAutoUpdatePreviewFast), FALSE);
EnableWindow(GetDlgItem(hDlg, rbAutoUpdateDeveloperFast), FALSE);
EnableWindow(GetDlgItem(hDlg, stEnableAutoUpdateFast), FALSE);
}
else
{
if (gpSet->UpdSet.isUpdateUseBuilds != 0)
CheckDlgButton(hDlg, cbEnableAutoUpdateFast, gpSet->UpdSet.isUpdateCheckOnStartup|gpSet->UpdSet.isUpdateCheckHourly);
CheckRadioButton(hDlg, rbAutoUpdateStableFast, rbAutoUpdateDeveloperFast,
(gpSet->UpdSet.isUpdateUseBuilds == 1) ? rbAutoUpdateStableFast :
(gpSet->UpdSet.isUpdateUseBuilds == 3) ? rbAutoUpdatePreviewFast : rbAutoUpdateDeveloperFast);
}
if (!bCheckIme)
{
ShowWindow(GetDlgItem(hDlg, gbDisableConImeFast), SW_HIDE);
ShowWindow(GetDlgItem(hDlg, cbDisableConImeFast), SW_HIDE);
ShowWindow(GetDlgItem(hDlg, stDisableConImeFast1), SW_HIDE);
ShowWindow(GetDlgItem(hDlg, stDisableConImeFast2), SW_HIDE);
ShowWindow(GetDlgItem(hDlg, stDisableConImeFast3), SW_HIDE);
RECT rcGroup, rcBtn, rcWnd;
if (GetWindowRect(GetDlgItem(hDlg, gbDisableConImeFast), &rcGroup))
{
int nShift = (rcGroup.bottom-rcGroup.top);
HWND h = GetDlgItem(hDlg, IDOK);
GetWindowRect(h, &rcBtn); MapWindowPoints(NULL, hDlg, (LPPOINT)&rcBtn, 2);
SetWindowPos(h, NULL, rcBtn.left, rcBtn.top - nShift, 0,0, SWP_NOSIZE|SWP_NOZORDER);
h = GetDlgItem(hDlg, IDCANCEL);
GetWindowRect(h, &rcBtn); MapWindowPoints(NULL, hDlg, (LPPOINT)&rcBtn, 2);
SetWindowPos(h, NULL, rcBtn.left, rcBtn.top - nShift, 0,0, SWP_NOSIZE|SWP_NOZORDER);
h = GetDlgItem(hDlg, stHomePage);
GetWindowRect(h, &rcBtn); MapWindowPoints(NULL, hDlg, (LPPOINT)&rcBtn, 2);
SetWindowPos(h, NULL, rcBtn.left, rcBtn.top - nShift, 0,0, SWP_NOSIZE|SWP_NOZORDER);
GetWindowRect(hDlg, &rcWnd);
MoveWindow(hDlg, rcWnd.left, rcWnd.top+(nShift>>1), rcWnd.right-rcWnd.left, rcWnd.bottom-rcWnd.top-nShift, FALSE);
}
}
return lbRc;
}
开发者ID:rheostat2718,项目名称:conemu-maximus5,代码行数:101,代码来源:OptionsFast.cpp
示例7: SendMessage
//.........这里部分代码省略.........
SWP_NOMOVE|SWP_NOZORDER);
}
else if (gpConEmu->mb_IsUacAdmin || (pArgs && (pArgs->RunAsAdministrator == crb_On)))
{
CheckDlgButton(hDlg, cbRunAsAdmin, BST_CHECKED);
if (gpConEmu->mb_IsUacAdmin) // Только в Vista+ если GUI уже запущен под админом
{
EnableWindow(GetDlgItem(hDlg, cbRunAsAdmin), FALSE);
}
else //if (gOSVer.dwMajorVersion < 6)
{
RecreateDlgProc(hDlg, WM_COMMAND, cbRunAsAdmin, 0);
}
}
//}
SetClassLongPtr(hDlg, GCLP_HICON, (LONG_PTR)hClassIcon);
RECT rcBtnBox = {0};
if (pArgs->aRecreate == cra_RecreateTab)
{
//GCC hack. иначе не собирается
SetDlgItemTextA(hDlg, IDC_RESTART_MSG, "About to restart console");
SendDlgItemMessage(hDlg, IDC_RESTART_ICON, STM_SETICON, (WPARAM)LoadIcon(NULL,IDI_EXCLAMATION), 0);
// Выровнять флажок по кнопке
GetWindowRect(GetDlgItem(hDlg, IDC_START), &rcBtnBox);
lbRc = TRUE;
}
else
{
//GCC hack. иначе не собирается
SetDlgItemTextA(hDlg, IDC_RESTART_MSG, "Create new console");
// Если ВЫКЛЮЧЕН "Multi consoles in one window"
// - Check & Disable "New window" checkbox
CheckDlgButton(hDlg, cbRunInNewWindow, (pArgs->aRecreate == cra_CreateWindow || !gpSetCls->IsMulti()) ? BST_CHECKED : BST_UNCHECKED);
EnableWindow(GetDlgItem(hDlg, cbRunInNewWindow), gpSetCls->IsMulti());
//
SendDlgItemMessage(hDlg, IDC_RESTART_ICON, STM_SETICON, (WPARAM)LoadIcon(NULL,IDI_QUESTION), 0);
POINT pt = {0,0};
MapWindowPoints(GetDlgItem(hDlg, IDC_TERMINATE), hDlg, &pt, 1);
DestroyWindow(GetDlgItem(hDlg, IDC_TERMINATE));
SetWindowPos(GetDlgItem(hDlg, IDC_START), NULL, pt.x, pt.y, 0,0, SWP_NOSIZE|SWP_NOZORDER);
SetDlgItemText(hDlg, IDC_START, (pArgs->aRecreate == cra_EditTab) ? L"&Save" : L"&Start");
DestroyWindow(GetDlgItem(hDlg, IDC_WARNING));
// Выровнять флажок по кнопке
GetWindowRect(GetDlgItem(hDlg, IDC_START), &rcBtnBox);
}
if (rcBtnBox.left)
{
// Выровнять флажок по кнопке
MapWindowPoints(NULL, hDlg, (LPPOINT)&rcBtnBox, 2);
RECT rcBox; GetWindowRect(GetDlgItem(hDlg, cbRunAsAdmin), &rcBox);
POINT pt;
pt.x = rcBtnBox.left - (rcBox.right - rcBox.left) - 5;
pt.y = rcBtnBox.top + ((rcBtnBox.bottom-rcBtnBox.top) - (rcBox.bottom-rcBox.top))/2;
SetWindowPos(GetDlgItem(hDlg, cbRunAsAdmin), NULL, pt.x, pt.y, 0,0, SWP_NOSIZE|SWP_NOZORDER);
}
// Correct cbRunInNewWindow position
if (!bRunInNewWindow_Hidden)
{
POINT pt = {};
MapWindowPoints(GetDlgItem(hDlg, cbRunAsAdmin), hDlg, &pt, 1);
RECT rcBox2; GetWindowRect(GetDlgItem(hDlg, cbRunInNewWindow), &rcBox2);
SetWindowPos(GetDlgItem(hDlg, cbRunInNewWindow), NULL,
pt.x-(rcBox2.right-rcBox2.left), pt.y, 0,0, SWP_NOSIZE);
}
// Dpi aware processing at the end of sequence
// because we done some manual control reposition
if (mp_DpiAware)
{
mp_DpiAware->Attach(hDlg, ghWnd);
}
// Ensure, it will be "on screen"
RECT rect; GetWindowRect(hDlg, &rect);
RECT rcCenter = CenterInParent(rect, mh_Parent);
MoveWindow(hDlg, rcCenter.left, rcCenter.top,
rect.right - rect.left, rect.bottom - rect.top, false);
// Была отключена обработка CConEmuMain::OnFocus (лишние телодвижения)
PostMessage(hDlg, (WM_APP+1), 0,0);
// Default focus control
if (pArgs->aRecreate == cra_RecreateTab)
SetFocus(GetDlgItem(hDlg, IDC_START)); // Win+~ (Recreate tab), Focus on "Restart" button"
else if ((pArgs->pszUserName && *pArgs->pszUserName) && !*pArgs->szUserPassword)
SetFocus(GetDlgItem(hDlg, tRunAsPassword)); // We need password, all other fields are ready
else
SetFocus(GetDlgItem(hDlg, IDC_RESTART_CMD)); // Set focus in command-line field
return lbRc;
}
开发者ID:shdrach,项目名称:ConEmu,代码行数:101,代码来源:Recreate.cpp
示例8: _ASSERTE
bool CConEmuInside::GetInsideRect(RECT* prWnd)
{
RECT rcWnd = {};
if (m_InsideIntegration == ii_None)
{
_ASSERTE(m_InsideIntegration != ii_None);
return false;
}
if (isParentIconic())
{
return false;
}
RECT rcParent = {}, rcRelative = {};
GetClientRect(mh_InsideParentWND, &rcParent);
if (m_InsideIntegration == ii_Simple)
{
rcWnd = rcParent;
}
else
{
RECT rcChild = {};
GetWindowRect(mh_InsideParentRel, &rcChild);
MapWindowPoints(NULL, mh_InsideParentWND, (LPPOINT)&rcChild, 2);
IntersectRect(&rcRelative, &rcParent, &rcChild);
// WinXP & Win2k3
if (gnOsVer < 0x600)
{
rcWnd = rcRelative;
}
// Windows 7
else if ((rcParent.bottom - rcRelative.bottom) >= 100)
{
// Предпочтительно
// Далее - ветвимся по OS
if (gnOsVer < 0x600)
{
rcWnd = MakeRect(rcRelative.left, rcRelative.bottom + 4, rcParent.right, rcParent.bottom);
}
else
{
rcWnd = MakeRect(rcParent.left, rcRelative.bottom + 4, rcParent.right, rcParent.bottom);
}
}
else if ((rcParent.right - rcRelative.right) >= 200)
{
rcWnd = MakeRect(rcRelative.right + 4, rcRelative.top, rcParent.right, rcRelative.bottom);
}
else
{
TODO("Другие системы и проверки на валидность");
rcWnd = MakeRect(rcParent.left, rcParent.bottom - 100, rcParent.right, rcParent.bottom);
}
}
if (prWnd)
*prWnd = rcWnd;
return true;
}
开发者ID:2asoft,项目名称:ConEmu,代码行数:63,代码来源:Inside.cpp
示例9: color
HBITMAP Explorerplusplus::CaptureTabScreenshot(int iTabId)
{
HDC hdc;
HDC hdcSrc;
HBITMAP hBitmap;
HBITMAP hPrevBitmap;
Gdiplus::Color color(0,0,0);
RECT rcMain;
RECT rcTab;
HWND hTab = m_hListView[iTabId];
GetClientRect(m_hContainer,&rcMain);
GetClientRect(hTab,&rcTab);
/* Main window BitBlt. */
hdc = GetDC(m_hContainer);
hdcSrc = CreateCompatibleDC(hdc);
/* Any bitmap sent back to the operating system will need to be in 32-bit
ARGB format. */
Gdiplus::Bitmap bi(GetRectWidth(&rcMain),GetRectHeight(&rcMain),PixelFormat32bppARGB);
bi.GetHBITMAP(color,&hBitmap);
/* BitBlt the main window into the bitmap. */
hPrevBitmap = (HBITMAP)SelectObject(hdcSrc,hBitmap);
BitBlt(hdcSrc,0,0,GetRectWidth(&rcMain),GetRectHeight(&rcMain),hdc,0,0,SRCCOPY);
/* Now BitBlt the tab onto the main window. */
HDC hdcTab;
HDC hdcTabSrc;
HBITMAP hbmTab;
HBITMAP hbmTabPrev;
BOOL bVisible;
hdcTab = GetDC(hTab);
hdcTabSrc = CreateCompatibleDC(hdcTab);
hbmTab = CreateCompatibleBitmap(hdcTab,GetRectWidth(&rcTab),GetRectHeight(&rcTab));
hbmTabPrev = (HBITMAP)SelectObject(hdcTabSrc,hbmTab);
bVisible = IsWindowVisible(hTab);
if(!bVisible)
{
ShowWindow(hTab,SW_SHOW);
}
PrintWindow(hTab,hdcTabSrc,PW_CLIENTONLY);
if(!bVisible)
{
ShowWindow(hTab,SW_HIDE);
}
MapWindowPoints(hTab,m_hContainer,(LPPOINT)&rcTab,2);
BitBlt(hdcSrc,rcTab.left,rcTab.top,GetRectWidth(&rcTab),GetRectHeight(&rcTab),hdcTabSrc,0,0,SRCCOPY);
SelectObject(hdcTabSrc,hbmTabPrev);
DeleteObject(hbmTab);
DeleteDC(hdcTabSrc);
ReleaseDC(hTab,hdcTab);
/* Shrink the bitmap. */
HDC hdcThumbnailSrc;
HBITMAP hbmThumbnail;
POINT pt;
hdcThumbnailSrc = CreateCompatibleDC(hdc);
/* Thumbnail bitmap. */
Gdiplus::Bitmap bmpThumbnail(GetRectWidth(&rcMain),GetRectHeight(&rcMain),PixelFormat32bppARGB);
bmpThumbnail.GetHBITMAP(color,&hbmThumbnail);
hPrevBitmap = (HBITMAP)SelectObject(hdcThumbnailSrc,hbmThumbnail);
/* Finally, shrink the full-scale bitmap down into a thumbnail. */
SetStretchBltMode(hdcThumbnailSrc,HALFTONE);
SetBrushOrgEx(hdcThumbnailSrc,0,0,&pt);
BitBlt(hdcThumbnailSrc,0,0,GetRectWidth(&rcMain),GetRectHeight(&rcMain),hdcSrc,0,0,SRCCOPY);
SetBitmapDimensionEx(hbmThumbnail,GetRectWidth(&rcMain),GetRectHeight(&rcMain),NULL);
SelectObject(hdcThumbnailSrc,hPrevBitmap);
DeleteDC(hdcThumbnailSrc);
DeleteObject(hBitmap);
SelectObject(hdcSrc,hPrevBitmap);
DeleteDC(hdcSrc);
ReleaseDC(m_hContainer,hdc);
return hbmThumbnail;
}
开发者ID:3scp8,项目名称:explorerplusplus,代码行数:98,代码来源:TaskbarThumbnails.cpp
示例10: memset
/*
* This function tries to determine the icon geometry from the tray
*
* If it fails an invalid rect is returned.
*/
QRect QSystemTrayIconSys::findIconGeometry(const int iconId)
{
static PtrShell_NotifyIconGetRect Shell_NotifyIconGetRect =
(PtrShell_NotifyIconGetRect)QSystemLibrary::resolve(QLatin1String("shell32"), "Shell_NotifyIconGetRect");
if (Shell_NotifyIconGetRect) {
Q_NOTIFYICONIDENTIFIER nid;
memset(&nid, 0, sizeof(nid));
nid.cbSize = sizeof(nid);
nid.hWnd = winId();
nid.uID = iconId;
RECT rect;
HRESULT hr = Shell_NotifyIconGetRect(&nid, &rect);
if (SUCCEEDED(hr)) {
return QRect(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top);
}
}
QRect ret;
TBBUTTON buttonData;
DWORD processID = 0;
HWND trayHandle = FindWindow(L"Shell_TrayWnd", NULL);
//find the toolbar used in the notification area
if (trayHandle) {
trayHandle = FindWindowEx(trayHandle, NULL, L"TrayNotifyWnd", NULL);
if (trayHandle) {
HWND hwnd = FindWindowEx(trayHandle, NULL, L"SysPager", NULL);
if (hwnd) {
hwnd = FindWindowEx(hwnd, NULL, L"ToolbarWindow32", NULL);
if (hwnd)
trayHandle = hwnd;
}
}
}
if (!trayHandle)
return ret;
GetWindowThreadProcessId(trayHandle, &processID);
if (processID <= 0)
return ret;
HANDLE trayProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ, 0, processID);
if (!trayProcess)
return ret;
int buttonCount = SendMessage(trayHandle, TB_BUTTONCOUNT, 0, 0);
LPVOID data = VirtualAllocEx(trayProcess, NULL, sizeof(TBBUTTON), MEM_COMMIT, PAGE_READWRITE);
if ( buttonCount < 1 || !data ) {
CloseHandle(trayProcess);
return ret;
}
//search for our icon among all toolbar buttons
for (int toolbarButton = 0; toolbarButton < buttonCount; ++toolbarButton ) {
SIZE_T numBytes = 0;
DWORD appData[2] = { 0, 0 };
SendMessage(trayHandle, TB_GETBUTTON, toolbarButton , (LPARAM)data);
if (!ReadProcessMemory(trayProcess, data, &buttonData, sizeof(TBBUTTON), &numBytes))
continue;
if (!ReadProcessMemory(trayProcess, (LPVOID) buttonData.dwData, appData, sizeof(appData), &numBytes))
continue;
int currentIconId = appData[1];
HWND currentIconHandle = (HWND) appData[0];
bool isHidden = buttonData.fsState & TBSTATE_HIDDEN;
if (currentIconHandle == winId() &&
currentIconId == iconId && !isHidden) {
SendMessage(trayHandle, TB_GETITEMRECT, toolbarButton , (LPARAM)data);
RECT iconRect = {0, 0};
if(ReadProcessMemory(trayProcess, data, &iconRect, sizeof(RECT), &numBytes)) {
MapWindowPoints(trayHandle, NULL, (LPPOINT)&iconRect, 2);
QRect geometry(iconRect.left + 1, iconRect.top + 1,
iconRect.right - iconRect.left - 2,
iconRect.bottom - iconRect.top - 2);
if (geometry.isValid())
ret = geometry;
break;
}
}
}
VirtualFreeEx(trayProcess, data, 0, MEM_RELEASE);
CloseHandle(trayProcess);
return ret;
}
开发者ID:NikhilNJ,项目名称:screenplay-dx,代码行数:97,代码来源:qsystemtrayicon_win.cpp
示例11: while
bool CConEmuInside::InsideFindShellView(HWND hFrom)
{
wchar_t szClass[128];
wchar_t szParent[128];
wchar_t szRoot[128];
HWND hChild = NULL;
// Для WinXP
HWND hXpView = NULL, hXpPlace = NULL;
while ((hChild = FindWindowEx(hFrom, hChild, NULL, NULL)) != NULL)
{
// Нас интересуют только видимые окна!
if (!IsWindowVisible(hChild))
continue;
// Windows 7, Windows 8.
GetClassName(hChild, szClass, countof(szClass));
if (lstrcmp(szClass, L"SHELLDLL_DefView") == 0)
{
GetClassName(hFrom, szParent, countof(szParent));
if (lstrcmp(szParent, L"CtrlNotifySink") == 0)
{
HWND hParent = GetParent(hFrom);
if (hParent)
{
GetClassName(hParent, szRoot, countof(szRoot));
_ASSERTE(lstrcmp(szRoot, L"DirectUIHWND") == 0);
SetInsideParentWND(hParent);
mh_InsideParentRel = hFrom;
m_InsideIntegration = ii_Explorer;
return true;
}
}
else if ((gnOsVer < 0x600) && (lstrcmp(szParent, L"ExploreWClass") == 0))
{
_ASSERTE(mh_InitialRoot == hFrom);
hXpView = hChild;
}
}
else if ((gnOsVer < 0x600) && (lstrcmp(szClass, L"BaseBar") == 0))
{
RECT rcBar = {}; GetWindowRect(hChild, &rcBar);
MapWindowPoints(NULL, hFrom, (LPPOINT)&rcBar, 2);
RECT rcParent = {}; GetClientRect(hFrom, &rcParent);
if ((-10 <= (rcBar.right - rcParent.right))
&& ((rcBar.right - rcParent.right) <= 10))
{
// Нас интересует область, прилепленная к правому-нижнему углу
hXpPlace = hChild;
}
}
// Путь в этом (hChild) хранится в формате "Address: D:\users\max"
else if ((gnOsVer >= 0x600) && lstrcmp(szClass, L"ToolbarWindow32") == 0)
{
GetClassName(hFrom, szParent, countof(szParent));
if (lstrcmp(szParent, L"Breadcrumb Parent") == 0)
{
HWND hParent = GetParent(hFrom);
if (hParent)
{
GetClassName(hParent, szRoot, countof(szRoot));
_ASSERTE(lstrcmp(szRoot, L"msctls_progress32") == 0);
mh_InsideParentPath = hChild;
// Остается ComboBox/Edit, в который можно запихнуть путь, чтобы заставить эксплорер по нему перейти
// Но есть проблема. Этот контрол не создается при открытии окна!
return true;
}
}
}
if ((hChild != hXpView) && (hChild != hXpPlace))
{
if (InsideFindShellView(hChild))
{
if (mh_InsideParentRel && mh_InsideParentPath)
return true;
else
break;
}
}
if (hXpView && hXpPlace)
{
mh_InsideParentRel = FindWindowEx(hXpPlace, NULL, L"ReBarWindow32", NULL);
if (!mh_InsideParentRel)
{
_ASSERTE(mh_InsideParentRel && L"ReBar must be found on XP & 2k3");
return true; // закончить поиск
}
SetInsideParentWND(hXpPlace);
_ASSERTE(mh_InsideParentWND!=NULL);
HWND hRoot = GetParentRoot();
_ASSERTE(mh_InsideParentPath==NULL || mh_InsideParentPath==hRoot);
mh_InsideParentPath = hRoot;
m_InsideIntegration = ii_Explorer;
//.........这里部分代码省略.........
开发者ID:2asoft,项目名称:ConEmu,代码行数:101,代码来源:Inside.cpp
示例12: winAllocateFBPrimaryDD
static Bool
winAllocateFBPrimaryDD(ScreenPtr pScreen)
{
winScreenPriv(pScreen);
winScreenInfo *pScreenInfo = pScreenPriv->pScreenInfo;
HRESULT ddrval = DD_OK;
DDSURFACEDESC ddsd;
DDSURFACEDESC *pddsdPrimary = NULL;
DDSURFACEDESC *pddsdOffscreen = NULL;
RECT rcClient;
winDebug ("winAllocateFBPrimaryDD\n");
/* Get client area location in screen coords */
GetClientRect(pScreenPriv->hwndScreen, &rcClient);
MapWindowPoints(pScreenPriv->hwndScreen,
HWND_DESKTOP, (LPPOINT) &rcClient, 2);
/* Create a DirectDraw object, store the address at lpdd */
ddrval = (*g_fpDirectDrawCreate) (NULL, &pScreenPriv->pdd, NULL);
if (ddrval != DD_OK)
FatalError("winAllocateFBPrimaryDD - Could not start DirectDraw\n");
/* Get a DirectDraw2 interface pointer */
ddrval = IDirectDraw_QueryInterface(pScreenPriv->pdd,
&IID_IDirectDraw2,
(LPVOID *) &pScreenPriv->pdd2);
if (FAILED(ddrval)) {
ErrorF("winAllocateFBShadowDD - Failed DD2 query: %08x\n",
(unsigned int) ddrval);
return FALSE;
}
winDebug ("winAllocateFBPrimaryDD - Created and initialized DD\n");
/* Are we windowed or fullscreen? */
if (pScreenInfo->fFullScreen) {
/* Full screen mode */
ddrval = IDirectDraw2_SetCooperativeLevel(pScreenPriv->pdd2,
pScreenPriv->hwndScreen,
DDSCL_FULLSCREEN
| DDSCL_EXCLUSIVE);
if (FAILED(ddrval))
FatalError("winAllocateFBPrimaryDD - Could not set "
"cooperative level\n");
/* Change the video mode to the mode requested */
ddrval = IDirectDraw2_SetDisplayMode(pScreenPriv->pdd2,
pScreenInfo->dwWidth,
pScreenInfo->dwHeight,
pScreenInfo->dwBPP,
pScreenInfo->dwRefreshRate, 0);
if (FAILED(ddrval))
FatalError("winAllocateFBPrimaryDD - Could not set "
"full screen display mode\n");
}
else {
/* Windowed mode */
ddrval = IDirectDraw2_SetCooperativeLevel(pScreenPriv->pdd2,
pScreenPriv->hwndScreen,
DDSCL_NORMAL);
if (FAILED(ddrval))
FatalError("winAllocateFBPrimaryDD - Could not set "
"cooperative level\n");
}
/* Describe the primary surface */
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
/* Create the primary surface */
ddrval = IDirectDraw2_CreateSurface(pScreenPriv->pdd2,
&ddsd, &pScreenPriv->pddsPrimary, NULL);
if (FAILED(ddrval))
FatalError("winAllocateFBPrimaryDD - Could not create primary "
"surface %08x\n", (unsigned int) ddrval);
winDebug ("winAllocateFBPrimaryDD - Created primary\n");
/* Allocate a DD surface description for our screen privates */
pddsdPrimary = pScreenPriv->pddsdPrimary = malloc(sizeof(DDSURFACEDESC));
if (pddsdPrimary == NULL)
FatalError("winAllocateFBPrimaryDD - Could not allocate surface "
"description memory\n");
ZeroMemory(pddsdPrimary, sizeof(*pddsdPrimary));
pddsdPrimary->dwSize = sizeof(*pddsdPrimary);
/* Describe the offscreen surface to be created */
/*
* NOTE: Do not use a DDSCAPS_VIDEOMEMORY surface,
* as drawing, locking, and unlocking take forever
* with video memory surfaces. In addition,
* video memory is a somewhat scarce resource,
* so you shouldn't be allocating video memory when
* you have the option of using system memory instead.
*/
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
//.........这里部分代码省略.........
开发者ID:sheldonrobinson,项目名称:VcXsrv,代码行数:101,代码来源:winpfbdd.c
示例13: winHotKeyAltTabPrimaryDD
static Bool
winHotKeyAltTabPrimaryDD(ScreenPtr pScreen)
{
winScreenPriv(pScreen);
winScreenInfo *pScreenInfo = pScreenPriv->pScreenInfo;
RECT rcClient, rcSrc;
HRESULT ddrval = DD_OK;
winDebug ("\nwinHotKeyAltTabPrimaryDD\n\n");
/* Alt+Tab was pressed, we will lose focus very soon */
pScreenPriv->fActive = FALSE;
/* Check for error conditions */
if (pScreenPriv->pddsPrimary == NULL || pScreenPriv->pddsOffscreen == NULL)
return FALSE;
/* Get client area in screen coords */
GetClientRect(pScreenPriv->hwndScreen, &rcClient);
MapWindowPoints(pScreenPriv->hwndScreen,
HWND_DESKTOP, (LPPOINT) &rcClient, 2);
/* Did we loose the primary surface? */
ddrval = IDirectDrawSurface2_IsLost(pScreenPriv->pddsPrimary);
if (ddrval == DD_OK) {
ddrval = IDirectDrawSurface2_Unlock(pScreenPriv->pddsPrimary, NULL);
if (FAILED(ddrval))
FatalError("winHotKeyAltTabPrimaryDD - Failed unlocking primary "
"surface\n");
}
/* Setup a source rectangle */
rcSrc.left = 0;
rcSrc.top = 0;
rcSrc.right = pScreenInfo->dwWidth;
rcSrc.bottom = pScreenInfo->dwHeight;
/* Blit the primary surface to the offscreen surface */
ddrval = IDirectDrawSurface2_Blt(pScreenPriv->pddsOffscreen, NULL, /* should be rcDest */
pScreenPriv->pddsPrimary,
NULL, DDBLT_WAIT, NULL);
if (ddrval == DDERR_SURFACELOST) {
IDirectDrawSurface2_Restore(pScreenPriv->pddsOffscreen);
IDirectDrawSurface2_Restore(pScreenPriv->pddsPrimary);
/* Blit the primary surface to the offscreen surface */
ddrval = IDirectDrawSurface2_Blt(pScreenPriv->pddsOffscreen,
NULL,
pScreenPriv->pddsPrimary,
NULL, DDBLT_WAIT, NULL);
if (FAILED(ddrval))
FatalError("winHotKeyAltTabPrimaryDD - Failed blitting primary "
"surface to offscreen surface: %08x\n",
(unsigned int) ddrval);
}
else {
FatalError("winHotKeyAltTabPrimaryDD - Unknown error from "
"Blt: %08dx\n", (unsigned int) ddrval);
}
/* Lock the offscreen surface */
ddrval = IDirectDrawSurface2_Lock(pScreenPriv->pddsOffscreen,
NULL,
pScreenPriv->pddsdOffscreen,
DDLOCK_WAIT, NULL);
if (ddrval != DD_OK || pScreenPriv->pddsdPrimary->lpSurface == NULL)
FatalError("winHotKeyAltTabPrimaryDD - Could not lock "
"offscreen surface\n");
/* Notify FB of the new memory pointer */
winUpdateFBPointer(pScreen, pScreenPriv->pddsdOffscreen->lpSurface);
/* Unregister our hotkey */
UnregisterHotKey(pScreenPriv->hwndScreen, 1);
return TRUE;
}
开发者ID:sheldonrobinson,项目名称:VcXsrv,代码行数:77,代码来源:winpfbdd.c
示例14: winActivateAppPrimaryDD
static Bool
winActivateAppPrimaryDD(ScreenPtr pScreen)
{
winScreenPriv(pScreen);
RECT rcSrc, rcClient;
HRESULT ddrval = DD_OK;
/* Check for errors */
if (pScreenPriv == NULL
|| pScreenPriv->pScreenInfo == NULL
|| pScreenPriv->pddsPrimary == NULL
|| pScreenPriv->pddsOffscreen == NULL)
return FALSE;
/* Check for do-nothing */
if (!pScreenPriv->fActive)
return TRUE;
/* We are activating */
ddrval = IDirectDrawSurface2_IsLost(pScreenPriv->pddsOffscreen);
if (ddrval == DD_OK) {
IDirectDrawSurface2_Unlock(pScreenPriv->pddsOffscreen, NULL);
/*
* We don't check for an error from Unlock, because it
* doesn't matter if the Unlock failed.
*/
}
/* Restore both surfaces, just cause I like it that way */
IDirectDrawSurface2_Restore(pScreenPriv->pddsOffscreen);
IDirectDrawSurface2_Restore(pScreenPriv->pddsPrimary);
/* Get client area in screen coords */
GetClientRect(pScreenPriv->hwndScreen, &rcClient);
MapWindowPoints(pScreenPriv->hwndScreen,
HWND_DESKTOP, (LPPOINT) &rcClient, 2);
/* Setup a source rectangle */
rcSrc.left = 0;
rcSrc.top = 0;
rcSrc.right = pScreenPriv->pSc
|
请发表评论