기본 콘텐츠로 건너뛰기

라벨이 Dialog인 게시물 표시

다이얼로그에서 static text의 배경을 투명하게 하기

다이얼로그에서 사용하는 static text의 배경색을 투명하게 하는 방법입니다. 다이얼로그의 OnCtlColor를 아래와 같이 재정의합니다. HBRUSH COutstandingOptionDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr; const UINT nID = pWnd->GetDlgCtrlID(); if(nCtlColor == CTLCOLOR_STATIC) { pDC->SetBkMode(TRANSPARENT); /// 배경을 투명하게 hbr = (HBRUSH)::GetStockObject(NULL_BRUSH); } else { hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); } return hbr; } 이것으로 투명한 static text를 만들수 있습니다. 다이얼로그의 배경으로 이미지를 넣었는데... 왼쪽 부분은 static text의 배경을 투명하게 하지 않은 것이고, 오른쪽 부분은 배경으로 투명하게 한것입니다. 오른쪽의 것이 훨씬 보기 좋죠?

WM_GETDLGCODE

다이얼로그에 위와 같은 에디터 컨트롤을 놓았습니다. 일반적인 방향키는 제대로 먹었으나 엔터키가 작동하지 않았습니다. 그래서 여기저기 찾아보니 다이얼로그 위에 놓이는 컨트롤에 WM_GETDLGCODE처리하는 메서드를 오버라이드해서 DLGC_WANTALLKEYS를 리턴하면 모든 키들을 처리할 수 있습니다. //{{AFX_MSG(CNoteEdit)  afx_msg UINT OnGetDlgCode();  //}}AFX_MSG BEGIN_MESSAGE_MAP(CNoteEdit, CEdit)  //{{AFX_MSG_MAP(CNoteEdit)  ON_WM_GETDLGCODE()  //}}AFX_MSG_MAP END_MESSAGE_MAP() UINT CNoteEdit::OnGetDlgCode() {         return DLGC_WANTALLKEYS ; }

Radio Button 동기화

이번에 라디오 버튼 동기화에 대해서 알아보도록 하겠습니다. 아래 그림과 같이 두 개의 라디오 버튼을 생성한 후에 라디오 버튼을 그룹으로 묶어 준다면 List Id를 동일하게 주어야 합니다. 그리고 각각 그 값들을 0에서 부터 설정해 주면 됩니다. 두 개의 라디오 버튼의 List Id는 동일하게 설정했구요, Value는 다르게 설정했습니다. 아래의 Arg 값이 뭘 의미하는지는 잘 모르겠어요^^

XM MDL Programming - #2(다이얼로그 생성하기)

이번에는 다이얼로그를 생성하는 방법을 알아봅시다. V7에서는 다이얼로그 하나 생성하기가 어려웠었는데, XM 이후부터는 MFC 다이얼로그를 상속해서 사용하니까 MFC에 익숙한 사람은 아무 어려움 없이 사용할수 있습니다. 한 마디로 쉬워요. 아시다시피 모달/모달리스 다이얼로그가 있는데 모달 보다는 모달리스 다이얼로그가 유용하게 사용됩니다. 다이얼로그가 실행되어 있는 동안에 MSTN으로 왔다 갔다 하면서 작업을 해야 하니까요.(그리고 모달 다이얼로그는 그냥 DoModal() 함수를 호출하면 되니까 별로 할것도 없어요) MS Visual Studio에서 리소스에서 다이얼로그를 하나 만듭니다. 여기서 조금 이상한데요. 모달리스 다이얼로그를 만들기 위해서는, Dialog Frame을 NONE으로 Style을 Child로 설정해야 한다고 합니다. 다이얼로그와 대응하는 클래스를 하나 생성합니다.(이때 CDialog를 상속하도록 합니다.) 생성한 클래스에서 부모 클래스를 첨부한 클래스로 변경합니다. 클래스 인스턴스를 하나 생성합니다. 인스턴스에서 Create()함수를 호출하여 모달리스 다이얼로그를 생성하면 됩니다. CBasicAppDlg* pDlg = new CBasicAppDlg("Basic Dialogbased MDL"); if(pDlg) pDlg->Create(); 아주 쉽죠~~~ 첨부 파일

다이얼로그 초기 로딩시 컨트롤에 포커스 주기

제목 그대로 다이얼로그 초기 로딩시에 컨트롤에 포커스를 주는 방법입니다. MFC Wizard에서 생성한 코드를 사용하면 항상 다이얼로그 자체가 포커스를 가지게 됩니다. 아래 그림에서 처럼 트리 컨트롤에 포커스를 주어 선택한 트리 아이템을 표시하려고 했습니다. 그런데 나의 의도대로 잘 되지 않았습니다. 계속 시도를 했습니다.~~ OnInitDialog() 함수의 마지막 리턴하는 부분의 주석(Wizard가 생성한)을 읽어 보니 '컨트롤에 포커스를 주지 않을려고 하면 TRUE를 리턴하라' 고 적혀 있었습니다. 그래서 FALSE를 리턴하니 내가 의도한 대로 트리 컨트롤에 포커스를 줄 수 있었습니다. m_pActivePage->ShowWindow(SW_SHOWNORMAL); pTreeCtrl->SetFocus(); } return FALSE;///TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE

다이얼로그 엔터키 막기

웹하드 | 무정혈 http://blog.naver.com/chohj35/120015153197 다이얼로그로 대화창을 만들고 에디트 버튼이나 기타 엔터키 입력을 받는 콘트롤을 올려 놓을 경우에 다이얼로그에서 먼저 엔터키를 받아서 OnOK(); 가 호출되어 걍 ~~ 죽죠 이 부분을 바꾸어 보겠습니다 1. 리소스 부분에서 IDOK 부분을 다른 리소스로 변환합니다 IDOK -- > IDC_BUTTON_ACCEPT #define IDC_BUTTON_ACCEPT 1150 2. IDC_BUTTON_ACCEPT의 핸들러 OnAccept();를 만들죠 void CConfigDlg::OnAccept() { // Add code here.. CDialog::OnOK(); } 3. 그 핸들러에 IDOK의 디폴트 핸들러를 호출합니다. (위에서 같이요: CDialog::OnOK();) 4. :PreTranslateMessage() 핸들러를 만들고 아래와 같이 작성 하세요 BOOL CConfigDlg::PreTranslateMessage(MSG* pMsg) { if( pMsg->message == WM_KEYDOWN ) // Enter Key Prevent.. so good.. ^^ { if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE ) { ::TranslateMessage(pMsg); ::DispatchMessage(pMsg); return TRUE; // DO NOT process further } } return CDialog::PreTranslateMessage(pMsg); } 5. 다이얼로그를 모달루 띄우고 엔터키를 입력해도 죽지...