पर बाध्य किए बिना विंडोज टूलटिप कंट्रोल का उपयोग कैसे करें मैं मूल विंडोज टूलटिप कंट्रोल (शुद्ध विन 32 एपीआई, एमएफसी सामान) का उपयोग करना चाहता हूं।किसी टूल
मैं दस्तावेज़ पढ़, ऐसा लगता है मैं टूलटिप नियंत्रण के लिए एक उपकरण संयोजित करना चाहते थे एक TTM_ADDTOOL संदेश भेजने के लिए है। इसके बाद ही मैं टूलटिप दिखाने के लिए TTM_TRACKACTIVATE & TTM_TRACKPOSITION भेज सकता हूं।
लेकिन मैं कहीं भी टूलटिप को प्रदर्शित करना चाहता हूं, जिसे मैं चाहता हूं। उदाहरण के लिए, जब माउस मेरी खिड़की के एक क्षेत्र में होवर करता है। यह क्षेत्र विंडोज की आंखों में एक उपकरण नहीं है, यह मेरी खिड़की में सिर्फ एक क्षेत्र है।
शायद मैं टूलटिप नियंत्रण में विंडो को बंधन कर सकता हूं, लेकिन इसका मतलब यह नहीं है कि मुझे टूलटिप नियंत्रण में बनाए गए हर विंडो को बंधन करना है?
क्या कोई आसान समाधान है ताकि मुझे हर विंडो के लिए TTM_ADDTOOL संदेश भेजने की आवश्यकता न हो?
मैंने वास्तव में कुछ कोड लिखा है, लेकिन टूलटिप बस प्रकट नहीं होता है। एंडर्स का जवाब वास्तव में कुछ प्रश्न हल करता है। और जब मैं अपने कोड के चारों ओर पोक करता हूं, तो मैं इसे काम करता हूं।
HWND toolTipWnd = ::CreateWindowExW(WS_EX_TOPMOST,
TOOLTIPS_CLASSW,0,WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
0,0,appHandle,0);
TOOLINFOW ti = {};
ti.cbSize = sizeof(TOOLINFOW);
ti.uFlags = TTF_ABSOLUTE | TTF_IDISHWND /* | TTF_TRACK */; // Don't specify TTF_TRACK here. Otherwise the tooltip won't show up.
ti.hwnd = toolTipWnd; // By doing this, you don't have to create another window.
ti.hinst = NULL;
ti.uId = (UINT)toolTipWnd;
ti.lpszText = L"";
::SendMessageW(toolTipWnd, TTM_ADDTOOLW, 0, (LPARAM)&ti);
::SendMessageW(toolTipWnd, TTM_SETMAXTIPWIDTH,0, (LPARAM)350);
यह एक टूलटिप विंडो जो किसी अन्य विंडो के लिए बाध्य नहीं है पैदा करेगा:
मामले में किसी को पता करने के लिए यह कैसे काम करना चाहता है। तो जब आप टूलटिप (जैसे में संदेश WM_MOUSEHOVER का जवाब) दिखाना चाहते हैं, इस फोन:
TOOLINFOW ti = {};
ti.cbSize = sizeof(TOOLINFOW);
ti.hwnd = toolTipWnd;
ti.uId = (UINT)toolTipWnd;
ti.lpszText = L"Sample Tip Text";
::SendMessageW(toolTipWnd,TTM_UPDATETIPTEXTW,0,(LPARAM)&ti); // This will update the tooltip content.
::SendMessageW(toolTipWnd,TTM_TRACKACTIVATE,(WPARAM)TRUE,(LPARAM)&ti);
::SendMessageW(toolTipWnd, TTM_TRACKPOSITION,0,(LPARAM)MAKELONG(x,y)); // Update the position of your tooltip. Screen coordinate.
//::SendMessageW(toolTipWnd,TTM_POPUP,0,0); // TTM_POPUP not working.. Don't know why.
ठीक रखना चाहिए। मैं अंत में उस समस्या को हल करता हूं। देशी Win32 एपीआई के साथ काम करना एक सिरदर्द है। मैं इसे टीटीएम_POPUP के साथ काम कर सकता हूं लेकिन मैं इसे टीटीएम_TRACKPOSITION के साथ हल करता हूं। – MorrisLiang
नमूना कोड में सब कुछ ठीक है ... धन्यवाद –