테두리와 초점 점선이 보이도록 CBUTTON으로 설정하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/369788

문제

간단한 대화 기반 애플리케이션을 만들었고 Default Cdialog에서 Visual Studio 편집기를 사용하여 3 개의 버튼을 추가했습니다 (드래그 앤 드로핑).

기본 확인 및 취소 버튼도 있습니다.

버튼 3을 클릭하면 버튼 1으로 초점을 설정하고 싶습니다.

MUY 버튼의 속성에서 속성을 평평하게 설정했습니다.

나는 이것을 코딩했다 :

void CbuttonfocusDlg::OnBnClickedButton3()
{
    // TODO: Add your control notification handler code here
    GetDlgItem(IDC_BUTTON1)->SetFocus();

    Invalidate();

}

그러나 Button1의 Boder는 결코 그려지지 않습니다. 캐럿 (초점을 나타내는 점선)은 버튼 3을 클릭하기 전에 언제든지 탭을 누르는 경우에만 그려집니다.

클릭 한 후에 보이는 것처럼 버튼이 정확히 보이기를 원합니다. 버튼 내부에 점선이 프로그램적으로 표시되면 플러스가됩니다.

내가 원하는 것 :

http://i33.tinypic.com/11t8pkl.png

내가 얻는 것 :

http://i37.tinypic.com/160q5hw.png

도움이 되었습니까?

해결책 3

이것은 버튼 주위에 두꺼운 테두리를 그립니다.

static_cast<CButton*>(GetDlgItem(IDC_BUTTON1))->SetButtonStyle(BS_DEFPUSHBUTTON);

더 우아한 방법은 CButtonFocusDLG에서 CBUTTON 멤버 변수를 정의하고 IDC_BUTTON1 컨트롤에 연결 한 다음

this->m_myButton.SetButtonStyle(BS_DEFPUSHBUTTON);

이렇게하면 초점을 설정하는 버튼이 기본 버튼을 설정하지만 버튼이 아닌 컨트롤 (대화 상자 내부)으로 이동하면 기본 버튼은 한 번 더 원래 기본 버튼이 설정되어 있습니다. 대화 자원,이 경우 "확인"버튼.

다른 팁

사용 WM_NEXTDLGCTL.

보다 Reymond Chen의 "대화 상자에서 초점을 설정하는 방법":

void SetDialogFocus(HWND hdlg, HWND hwndControl)
{
    SendMessage(hdlg, WM_NEXTDLGCTL, (WPARAM)hwndControl, TRUE);
}

UpdateWindow를 호출하면 초점 변경이 적용되기 전에 버튼이 다시 그려집니다. 무효는 그 자체로 충분해야하며, 모든 것이 정착되면 창문이 다시 칠해집니다.

나는 Joel의 제안을 따르고 있습니다. 그러나 해당 링크에 사용 된 API와 약간 다르지만 내 것은 다음과 같습니다.

postmessage (wm_nextdlgctl, (wparam) (pwnd-> getsafehwnd ()), true);

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top