반응형
Dialog를 사용하였을때, 우리는 위의 표시줄을 없앤채로 사용할 수 있다.
그 경우에는 다이얼로그의 위치를 옮기게 만드는데 상당히 문제가 있다.
따라서, 다음과 같은 작업으로 테두리 드래그를 통해 다이얼로그를 옮길 수 있다.

클레스 마법사에서 메세지중, ON_NCHITTEST에 해당하는 것을 추가하고 다음과 같은 내용을 해주면 된다.

아래코드는
Board의 윗부분을 클릭했을 때,
System 함수를 클릭한것과 같은 Return값을 보여주게 된다.

LRESULT SizeWindowDlg::OnNcHitTest(CPoint point)
{
    // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
    UINT nHitTest = CDialog::OnNcHitTest( point );

    return ( nHitTest == HTTOP  ) ? HTCAPTION : nHitTest;
}

MSDN에서 HTTOP과 HTCAPTION을 검색하면, 다른 Dialog위치들에 대한 수정도 가능하다.
반응형
반응형
Dialog 에 OnInitDialog()함수내에 다음과 같은 구문을 추가하면 된다.

BOOL SizeWindowDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    typedef BOOL(WINAPI *SLWA)(HWND,COLORREF,BYTE,DWORD);
    SLWA pSetLayeredWindowAttributes = NULL;
    HINSTANCE hmodUSER32 = LoadLibrary(_T("USER32.DLL"));
   
    pSetLayeredWindowAttributes =    (SLWA)GetProcAddress(hmodUSER32,"SetLayeredWindowAttributes");

    HWND hwnd = this->m_hWnd;
    SetWindowLong(hwnd,GWL_EXSTYLE,GetWindowLong(hwnd,GWL_EXSTYLE) | WS_EX_LAYERED);
    BYTE byAlpha = 70; //투명도 설정
    COLORREF cr = GetSysColor(COLOR_BTNFACE);
    SetLayeredWindowAttributes( cr, byAlpha, LWA_COLORKEY );

return TRUE;
}


마지막의 LWA_COLORKEY 옵션의 변경을 통하여 여러 형태의 Dialog가 가능하다.

나머지는 MSDN을 참고하여 수정가능함
반응형

+ Recent posts