void gui_make_popup(char_u *path_name, int mouse_pos) { vimmenu_T *menu = gui_find_menu(path_name); if (menu != NULL) { /* Find the position of the current cursor */ DWORD temp_p; POINT p; temp_p = GetDCOrg(s_hdc); p.x = LOWORD(temp_p); p.y = HIWORD(temp_p); if (mouse_pos) { int mx, my; gui_mch_getmouse(&mx, &my); p.x += mx; p.y += my; } else if (curwin != NULL) { p.x += TEXT_X(W_WINCOL(curwin) + curwin->w_wcol + 1); p.y += TEXT_Y(W_WINROW(curwin) + curwin->w_wrow + 1); } msg_scroll = FALSE; gui_mch_show_popupmenu_at(menu, (int)p.x, (int)p.y); } }
BOOL WINAPI _export BLBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop) { int x, y; #ifdef _DEBUG DbgPrintf("NhWSrh.DLL BLBitBlt Begin"); #endif // restore the old textout. RestoreWinApi(&g_BitBltHook); #ifdef _DEBUG DbgPrintf("NhWSrh.DLL BitBlt: hdcDest: %d, hdcSrc: %d, nXDest: %d, nYDest, %d, nWidth: %d, nHeight: %d", hdcDest, hdcSrc, nXDest, nYDest, nWidth, nHeight); #endif if (nWidth > 5) { g_dwDCOrg = GetDCOrg(hdcDest); x = LOWORD(g_dwDCOrg); y = HIWORD(g_dwDCOrg); x += nXDest; y += nYDest; g_dwDCOrg = MAKELONG(x, y); CheckMemDCWordBuffer(hdcDest, hdcSrc); } else { #ifdef _DICTING_ if (CheckDCWndClassName(hdcDest)) { #ifdef _DEBUG DbgPrintf("NhWSrh.DLL In IE4"); #endif g_dwDCOrg = GetDCOrg(hdcDest); x = LOWORD(g_dwDCOrg); y = HIWORD(g_dwDCOrg); x += nXDest; y += nYDest; g_dwDCOrg = MAKELONG(x, y); CheckMemDCWordBuffer(hdcDest, hdcSrc); } #endif } // call old textout. BitBlt(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop); HookWinApi(&g_BitBltHook, ONLYHOOK); #ifdef _DEBUG DbgPrintf("NhWSrh.DLL BLBitBlt End"); #endif return (TRUE); }
BOOL WINAPI _export BLExtTextOut(HDC hDC, int x, int y, UINT fuOpt, const RECT FAR* lprc, LPCSTR lpStr, UINT cbLen, int FAR* lpDx) { POINT pt ; HWND hWDC ; HWND hWPT ; #ifdef _DEBUG DbgPrintf("NhWSrh.DLL BLExtTextOut Begin"); DbgPrintf("NhWSrh.DLL BLExtTextOut hDC: %d, x: %d, y: %d, fuOpt: %d, cbLen: %d", hDC, x, y, fuOpt, cbLen); #endif // restore the old textout. RestoreWinApi(&g_ExtTextOutHook); //Added by XGL, Nov 3rd, 1998 //We cannot get corret word with Explorer as background window //in Windows98, so this situation must be dealt with. pt.x = g_CurMousePos.x; pt.y = g_CurMousePos.y ; hWDC = WindowFromDC(hDC) ; hWPT = WindowFromPoint(pt) ; if (hWDC == NULL || hWPT == hWDC || IsParentOrSelf(hWPT, hWDC) || IsParentOrSelf(hWDC, hWPT)) { //Adding ends. XGL, Nov 3rd, 1998 if ((g_bAllowGetCurWord) && (!IsBadReadPtr(lpStr, cbLen)) && (cbLen > 0)) { g_nTextAlign = GetTextAlign(hDC); g_nExtra = GetTextCharacterExtra(hDC); GetCurrentPositionEx(hDC, &g_CurPos); GetTextMetrics(hDC, &g_tm); /////////////////////////////////////////////////////////////////////////// // Modify by Yan/Gang 1997/11/18 // 用於修改在计算 TA_CENTER 情况的失误。 g_dwDCOrg = 0; bRecAllRect = FALSE; GetStringRect(hDC, (LPSTR)lpStr, cbLen, x, y, &g_rcTotalRect, lpDx); bRecAllRect = TRUE; // End Modify /////////////////////////////////////////////////////////////////////////// if ((WindowFromDC != NULL)&&(WindowFromDC(hDC) == NULL)) { #ifdef _DEBUG DbgPrintf("NhWSrh.DLL BLTextOut WindowFromDC() == NULL"); DbgLPCSTR("NhWSrh.DLL BLTextOut: ", (LPSTR)lpStr, cbLen, TRUE); #endif // 赋零,用於避免MEMDC对串位置的影响· g_dwDCOrg = 0; AddToTextOutBuffer(hDC, (LPSTR)lpStr, cbLen, x, y, lpDx); } else { #ifdef _DEBUG DbgPrintf("NhWSrh.DLL BLTextOut WindowFromDC() != NULL"); DbgLPCSTR("NhWSrh.DLL BLTextOut: ", (LPSTR)lpStr, cbLen, TRUE); #endif g_dwDCOrg = GetDCOrg(hDC); GetCurMousePosWord(hDC, (LPSTR)lpStr, cbLen, x, y, lpDx); } } else { #ifdef _DEBUG DbgPrintf("NhWSrh.DLL BLExtTextOut ((!g_bAllowGetCurWord) || (IsBadReadPtr(lpStr, cbLen)) && (cbLen <= 0))"); if (!g_bAllowGetCurWord) { DbgPrintf("NhWSrh.DLL BLExtTextOut !g_bAllowGetCurWord"); } if (IsBadReadPtr(lpStr, cbLen)) { DbgPrintf("NhWSrh.DLL BLExtTextOut IsBadReadPtr()"); } if (cbLen <= 0) { DbgPrintf("NhWSrh.DLL BLExtTextOut cbLen <= 0"); } #endif } } // call old textout. ExtTextOut(hDC, x, y, fuOpt, lprc, lpStr, cbLen, lpDx); HookWinApi(&g_ExtTextOutHook, ONLYHOOK); #ifdef _DEBUG DbgPrintf("NhWSrh.DLL BLExtTextOut End"); #endif return (TRUE); }