MFC tip

C++ 2011. 1. 25. 00:00

 

 

 

MFC

 

dialog static text control의 caption 한글 깨짐

    Resource View > XXXX.rc > Dialog > IDD_XXXX_DIALOG > Properties > Language 를 한국어로 변경

 

 

dialog static control 배경 투명하게 만들기

    dialog에서 WM_CTLCOLOR 메세지 함수(OnCtlColor) 생성후 코드 추가

    HBRUSH CSearchFileDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

    {

        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

        switch (nCtlColor)

        {

        case CTLCOLOR_STATIC:

            if (pWnd->GetDlgCtrlID() == IDC_STATIC1)

            {

                //pDC->SetTextColor(RGB(255, 0, 0));

                pDC->SetBkMode(TRANSPARENT);

                return (HBRUSH)GetStockObject(NULL_BRUSH);

            }

            break;

        }

        return hbr;

    }

    

    출처 : http://sehwa4444.egloos.com/2738921

    

    

dialog check/radio control 배경 투명하게 만들기 (XP Theme 버그)

    1. dialog에서 WM_CTLCOLOR 메세지 함수(OnCtlColor) 생성후 코드 추가

    HBRUSH CSearchFileDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

    {

        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

        switch (nCtlColor)

        {

        case CTLCOLOR_STATIC:

            if (pWnd->GetDlgCtrlID() == IDC_CHECK_SUB)

            {

                //pDC->SetTextColor(RGB(255, 0, 0));

                pDC->SetBkMode(TRANSPARENT);

                return (HBRUSH)GetStockObject(NULL_BRUSH);

            }

            break;

        }

        return hbr;

    }

    여기까지 하면 check/radio control이 검정색으로 나옴.

    다음 코드 추가하여 XP Theme 해제.

    

    2. SetWindowTheme() 함수 사용을 위한 library 추가

    #pragma comment(lib, "UxTheme.lib")

    

    3. SetWindowTheme() 호출

    Dialog클래스의 OnInitDialog()에 다음 코드 추가

    HWND hCheckSub;

    GetDlgItem(IDC_CHECK_SUB, &hCheckSub);

    SetWindowTheme(hCheckSub, L"", L"");

    

    출처 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=688631&ref=688631

      

 

 

 

 

 

CToolBar 툴바 추가

1. 툴바 리소스 추가

    다른 프로젝트의 툴바 리소스 추가시 작업중인 Visual Studio에서

    새로운 툴바 리소스 추가 > 복사할 리소스 파일 열기 > 아이콘 하나씩 복사

    

    혹은 리소스 파일(.rc)에서 직접 복사

 

2. MainFrm.h에 CToolBar 변수 선언

    CToolBar m_wndToolBar;

    

3. CMainFrame::OnCreate()에 생성 코드 작성

 

    //CToolBar

    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

        //| CBRS_GRIPPER //도킹기능

        | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)

        || !m_wndToolBar.LoadToolBar(IDR_TOOLBAR))

    {

        TRACE0("Failed to create toolbar\n");

        return -1; // fail to create

    }

 

    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

    EnableDocking(CBRS_ALIGN_ANY);

    

    //방법1. 툴바 붙임

    //DockControlBar(&m_wndToolBar, AFX_IDW_DOCKBAR_TOP);    //위쪽에 붙임

 

    //방법2. 툴바 위치 조정하여 붙임

    CRect toolRect;

    this->RecalcLayout();    //현재 Client 영역 구함

    m_wndToolBar.GetWindowRect(&toolRect);    //툴바 영역 저장

    toolRect.left+=100;                        //영역 조정

    DockControlBar(&m_wndToolBar,AFX_IDW_DOCKBAR_TOP,&toolRect);    //해당 영역으로 붙임

 

 

 

    

MFC 메뉴 제거, 타이틀 제거, 캡션 설정

    CMainFrame::PreCreateWindow() 에서

        cs.hMenu = NULL;                    //메뉴 제거

        cs.style &= ~FWS_ADDTOTITLE;        //타이틀 제거

        this->SetTitle(_T("마음의 소리"));    //캡션 설정

 

 

        

        

UTF-8 -> UNICODE 변환

CString ConvertUTF8toUnicode(char* ansiStr)

{

    int nSize = MultiByteToWideChar(CP_UTF8, 0, ansiStr , -1 , 0 , 0);

 

    TCHAR* uniStr = new TCHAR[nSize+1];

    MultiByteToWideChar(CP_UTF8, 0, ansiStr , -1 , uniStr, nSize);

    uniStr[nSize] = '\0';

 

    CString str(uniStr);

    delete uniStr;

    return str;

 

 

    return str;

}

'C++' 카테고리의 다른 글

CRT 이야기 [펌]  (0) 2011.02.14
IPC (inter-process communication)  (0) 2011.02.03
LocalAlloc, GlobalAlloc, HeapAlloc, VirtualAlloc  (0) 2011.02.03
파일 핸들링 API  (0) 2011.02.03
OLEDB  (0) 2011.01.24
COM  (0) 2011.01.24
MFC 기초 정리  (0) 2011.01.21
파일 비동기 IO 조작 (Async IO)  (0) 2011.01.18