बंद बटन या सिस्टम मेनू को मिटाने के बिना विंडोज टाइटल बार से आइकन हटा रहा है?

मैं एक एमएफसी एप्लीकेशन विकसित कर रहा हूं और मैं हाल ही में विंडोज टाइटल बार से आइकन को हटाने के लिए एक अच्छी विधि खोज रहा हूं, लेकिन बंद बटन को बरकरार रखता हूं। दो स्पष्ट उम्मीदवार समाधान सिस्टम मेनू शैली को बंद कर रहे हैं या टूल विंडो शैली का उपयोग कर रहे हैं, लेकिन मैं सिस्टम मेनू को अक्षम नहीं करना चाहता हूं या संकुचित टूल विंडो शीर्षक बार का उपयोग नहीं करना चाहूंगा। कई एमएफसी अनुप्रयोगों में यह कार्यक्षमता है, इसलिए मुझे आश्चर्य है: क्या मुझे ऐसा करने का कुछ मानक तरीका याद आ रहा है?

0
ro fr bn

6 उत्तर

सिस्टम मेनू से छुटकारा पाने के बारे में और फिर इसे किसी अन्य स्थान पर वापस रखकर yourseld (बंद बटन आदि के बगल में कहें)?

0
जोड़ा

आइकन के बिना, सिस्टम मेनू तक पहुंचने के लिए उपयोगकर्ताओं के लिए एकमात्र तरीका मैं कल्पना कर सकता हूं कि टाइटलबार के दायाँ-क्लिक के माध्यम से है।

यदि आपके मन में यह था, तो आप अपने मुख्य फ्रेम पर WM_RBUTTONDOWN को संभाल सकते हैं और फिर गणना कर सकते हैं कि राइट-क्लिक टाइटलबार पर था या नहीं।

int clickX = GET_X_LPARAM(lParam);
int clickY = GET_Y_LPARAM(lParam);

CRect frameRect;
mainFrame.GetWindowRect(&frameRect);

int titleBarHeight = GetSystemMetrics(SM_CYCAPTION);

if (clickX >= frameRect.left &&
    clickX <= frameRect.right &&
    clickY >= frameRect.top &&
    clickY <= frameRect.top + titleBarHeight)
{
   TrackPopupMenu(m_systemMenu);
}
0
जोड़ा

यह पता लगाने के लिए कि उपयोगकर्ता ने आपके कैप्शन पर राइट-क्लिक किया है और फिर सिस्टम मेनू लाया है, आप WM_NCRBUTTONDOWN का उपयोग कर सकते हैं।

0
जोड़ा

आप एक पूर्ण पारदर्शी आइकन का उपयोग कर सकते हैं।

0
जोड़ा

डेल्फी में एक नमूना कोड जो आइकन हटा देता है:

const
  WM_ResetIcon = WM_APP - 1;

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
  protected
    procedure WMResetIcon(var Message: TMessage); message WM_ResetIcon;
  end;

implementation

procedure TForm1.FormShow(Sender: TObject);
begin
  PostMessage(Handle, WM_ResetIcon, 0, 0);
end;

procedure TForm1.WMResetIcon(var Message: TMessage);
const
  ICON_SMALL = 0;
  ICON_BIG   = 1;
begin
  DestroyIcon(SendMessage(Handle, WM_SETICON, ICON_BIG, 0));
  DestroyIcon(SendMessage(Handle, WM_SETICON, ICON_SMALL, 0));
end;

एमएफसी के लिए एक समान कोड काम करना चाहिए। असल में, आपको बस सही जगह पर WM_SETICON को NULL की आवश्यकता है।

0
जोड़ा

WS_EX_DLGMODALFRAME विस्तारित शैली सेट करें।

0
जोड़ा
यह जवाब होना चाहिए था।
जोड़ा लेखक c00000fd, स्रोत