2008-08-13 3 views
6

MFC 응용 프로그램을 개발 중이며 최근에는 Windows 제목 표시 줄에서 아이콘을 제거하는 좋은 방법을 찾고 있지만 닫기 단추는 유지합니다. 두 가지 확실한 해결책은 시스템 메뉴 스타일을 끄거나 도구 창 스타일을 사용하는 것이지만 시스템 메뉴를 비활성화하거나 축소 된 도구 창 제목 표시 줄을 사용하지 않는 것이 좋습니다. 많은 MFC 응용 프로그램이이 기능을 가지고 있으므로 궁금합니다.이 작업을 수행하는 표준 방법이 누락 되었습니까?닫기 버튼이나 시스템 메뉴를 버리지 않고 Windows 제목 표시 줄에서 아이콘을 제거 하시겠습니까?

답변

2

당신은 사용자가 자막에 오른쪽 클릭 한 경우 감지 WM_NCRBUTTONDOWN을 사용하여 다음 시스템 메뉴를 표시 할 수 있습니다.

0

시스템 메뉴를 제거한 다음 다른 곳으로 다시 가져 오는 것은 무엇입니까? (예 : 닫기 버튼 등)?

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); 
} 
4

세트 WS_EX_DLGMODALFRAME 확장 스타일.

+0

이 질문에 대한 답변이 있어야합니다. – c00000fd

2

완전히 투명 한 아이콘을 사용할 수 있습니다.

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; 

유사한 코드가 MFC를 위해 작동합니다. 기본적으로 올바른 위치에서 NULL에 WM_SETICON이 필요합니다.

관련 문제