ऐसा करने के लिए कोई अच्छा तरीके हैं, लेकिन एक दृष्टिकोण है कि आप के लिए काम कर सकते हैं एक GetMsgProc, जिसमें आपके ओवरले ड्रॉ जोड़ने के लिए SetWindowsHookEx (...) का उपयोग करते हुए प्रश्न में आवेदन हुक करने के लिए है WM_PAINT संदेशों की प्रतिक्रिया। मूल विचार यह है कि एप्लिकेशन अपने ड्राइंग को समाप्त करने के बाद आप अपने ग्राफिक्स को ठीक कर रहे हैं।
अपने मुख्य अनुप्रयोग में:
....
HMODULE hDllInstance = LoadLibrary("myFavoriteDll");
HOOKPROC pOverlayHook = (HOOKPROC)GetProcAddress(hDllInstance, "OverlayHook");
SetWindowsHookEx(WH_GETMESSAGE, pOverlayHook, hDllInstance, threadId);
एक DLL कहीं में बंद:
LRESULT CALLBACK OverlayHook(int code, WPARAM wParam, LPARAM lParam)
{
//Try and be the LAST responder to WM_PAINT messages;
//Of course, if some other application tries this all bets are off
LRESULT retCode = CallNextHookEx(NULL, code, wParam, lParam);
//Per GetMsgProc documentation, don't do anything fancy
if(code < 0) return retCode;
//Assumes that target application only draws when WM_PAINT message is
//removed from input queue.
if(wParam == PM_NOREMOVE) return retCode;
MSG* message = (MSG*)lParam;
//Ignore everything that isn't a paint request
if(message->message != WM_PAINT) return retCode;
PAINTSTRUCT psPaint;
BeginPaint(message->hwnd, &psPaint);
//Draw your overlay here
...
EndPaint(message->hwnd, &psPaint);
return retCode;
}
यह सब Win32 तो अपने सी # कोड पी हो जाएगा/भारी और तदनुसार काफी बदसूरत आह्वान है। आपका डीएलएल भी अप्रबंधित होना चाहिए (यदि आप अपने आप के अलावा किसी अन्य प्रक्रिया में इंजेक्ट करना चाहते हैं), यह एक भी नास्टियर समाधान बनाते हैं।
यह आपकी समस्या को ज़ेड-ऑर्डर और क्लिपिंग समस्याओं के साथ हल करेगा, क्योंकि आप विंडो में ही प्रतिपादन कर रहे हैं। हालांकि, यदि आप जिस एप्लिकेशन को लक्षित कर रहे हैं, तो WM_PAINT चीजों का जवाब देने वाले WinProc के बाहर कोई भी चित्र अलग हो जाता है; यह एक पूरी तरह से असामान्य अवसर नहीं है।
स्रोत
2009-05-04 07:05:24
तुम क्या आप क्या करना चाहते करने के लिए के रूप में और अधिक विशिष्ट हो सकता है के लिए DirectX के शीर्ष पर आकर्षित करने के लिए चाहते हो सकता है? किसी अन्य एप्लिकेशन की विंडो पर टेक्स्ट डालने और इसे वहां रहने के लिए, केवल बदसूरत तरीके से रखने का कोई शानदार तरीका नहीं है। लेकिन आप अपनी विशिष्ट स्थिति के आधार पर जो कुछ भी चाहते हैं उसे प्राप्त करने में सक्षम हो सकते हैं। –
यह दिखाने के लिए छवि जोड़ा गया है कि मैं क्या करना चाहता हूं – s5804