원본글 주소 : http://devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=7983&page=1
AfxMessageBox 를 보니 가운데 정렬이 가능한 인터페이스 부분이 없더군요.
그래서 WH_CBT hook을 사용하여 메세지 부분의 스타일을 변경하는 방법으로 접근하여 보았습니다.
먼저 AfxMessageBox의 메세지 부분을 Spy를 통하여 보니 Static 컨트롤이고 아이디는 0x0000FFFF
가운데 정렬 스타일은 SS_CENTER 이더군요.
그럼 Hook Procedure 에서 AfxMessageBox의 Static 컨트롤을 접근하여 스타일을 SS_CENTER를 추가 시켜주면 되겠네요.
====================================
HHOOK g_hHook;
UINT CMsgCenterAlignDlg::AfxMyMessageBox()
{
g_hHook = SetWindowsHookEx(WH_CBT, &HookWndProc, 0, GetCurrentThreadId()); //훅프로시져 생성
return AfxMessageBox("Center Align\nCenter Align Center Align\nCenter Align Center Align Center Align");
}
//생성된 훅프로시져 정의
LRESULT CALLBACK CMsgCenterAlignDlg::HookWndProc(INT nCode, WPARAM wParam, LPARAM lParam)
{
HWND hChildWnd;
if (nCode == HCBT_ACTIVATE) //활성화 된 창의 훅
{
hChildWnd = (HWND)wParam;
HWND hStatic;
if((hStatic = ::GetDlgItem(hChildWnd,0x0000FFFF))!=NULL) //아이디가 0x0000FFFF인 아이템의 핸들을 얻고
{
DWORD dwStyle = ::GetWindowLong(hStatic, GWL_STYLE); // 스타일을 구해서
::SetWindowLong(hStatic, GWL_STYLE, dwStyle | SS_CENTER); //스타일에 추가를 해준다.
}
UnhookWindowsHookEx(g_hHook); //훅프로시져를 생성하면, 정의문 마지막에 선언을 해줘야 한다.
}else CallNextHookEx(g_hHook, nCode, wParam, lParam); //다른 훅프로시져가 있을 경우를 대비하여 다른 훅프로시져에게 넘겨주는 역할을 한다. 해줘도 그만 안해줘도 그만이지만, 가급적 해줘야 한다고 MSDN에 써있다.
return 0;
}
댓글 없음:
댓글 쓰기