현재 작업줄인 툴작업에서
당연히 되겠지라고 방치하다가 뒷통수 맞은 문제점 입니다.


음.. 그러니까.. 원래 안개 설정할때 CColorDlg 란 공용 컨트롤을 사용해서 DoModal 을 할려고 했지만.. 왠지 모르게 위 그림처럼 창이 안뜨더군요....

이것저것 찾아보다가..


풀화면에서 Dialog띠우기 팁 입니다. (DX9.0) 2005/05/25
http://www.doopal.net

안녕하세요 볼따구 입니다.


풀화면에서 가끔 Dialog를 뛰어야 하는 경우가 생깁니다.
9.0 이상 버젼에서는 DX차원에서 지원을 합니다.

하지만, 몇가지 제안이 있기 때문에 실제로 적용시키는걸 잘 모르는분들이 있어서
한번 올려봅니다. ;;;

D3D디바이스를 생성할때
D3DPRESENT_PARAMETERS 인자중에 몇가지를 셋팅을 해야 합니다.
[1] SwapEffect = D3DSWAPEFFECT_DISCARD;
[2] BackBufferFormat = D3DFMT_X8R8G8B8; 또는 D3DFMT_X1R5G5B5, D3DFMT_R5G6B5
[3] Flags        |= D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;

위에 옵션을 셋팅해서 디바이스를 생성한후에
D3DDevice->SetDialogBoxMode( TRUE );  이렇게 디바이스에 DialogBox를 사용한다고 해 놓으면
풀화면에서도 잘나오는걸 확인할수가 있을겁니다.

즐프~
(출처 : http://proline1.cafe24.com/zeroboard/view.php?id=data&no=49)

라고 SetDialogBoxMode를 true로 하라길래 수정 했지만 역시 변한게 없었습니다.

그러다가....
정말 우연히...
alt 키를 눌렀는데 떠지더군요.   orz

대략 창을 띄울때 DirectX 렌더링으로 순위가 뒤로 밀린건지...
잘 알 수는 없지만.. 원인을 알았으니 고치는건 쉽죠

CColorDialog dlg(CC_FULLOPEN);
PostMessage(WM_SYSKEYDOWN, VK_LMENU, 0);
dlg.DoModal();
 
DoModal 직전에 강제로 Alt 키를 눌러서 포커스가 메뉴로 가게 했습니다..
그러니..

제대로 나왔습니다.....

About 상자도 이렇게 처리하니 잘 뜨는군요.

// App command to run the dialog
void CMapTool_3DApp::OnAppAbout()
{
 CAboutDlg aboutDlg;
 PostMessage(NULL, WM_SYSKEYDOWN, VK_LMENU, 0);
 aboutDlg.DoModal();
}

그리고.. FileDlg 공용박스는... 왠지 저거 안해도 제대로 나오더군요..
MFC 버그인가....

하지만 일단 안전을 위해 PostMessage 를 해두는것도 나쁘진 않을꺼 같네요.

+ Recent posts