본문 바로가기

개발관련/MFC

Localizing AfxMessageBox, Flags Button "Yes", "No", etc...

 AfxMessageBox 에서 사용하는 nType은 기본적으로 os의 language에 따른다고 한다. 따라서

아무리 로컬라이즈 했다고 하더라도 해당 부분에서 뜬근없이 한글이 나타나는 경우가..;;

 

 많이 사용하는 것이라 간단하게 해결될 수 있을것이라 생각했는데 클래스를 새로 만들어서 서

브클래싱하라니... 난 그저 yes, no 라고만 해주면 된다고!!


 다행이 naver 에 어떤 분이 쉽게 wrapping 해서 사용하는 방법을 올려 주셨다.

원문 : http://dontcryme.blog.me/30033326734


HHOOK gDovHook;
LRESULT CALLBACK dovProc(int nCode, WPARAM wParam, LPARAM lParam);
int dovMessageBox(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption,UINT nType)
{
	gDovHook = SetWindowsHookEx(WH_CBT,&dovProc,0,GetCurrentThreadId());

	return ::MessageBox(hWnd, lpText, lpCaption, nType);
}
LRESULT CALLBACK dovProc(int nCode, WPARAM wParam, LPARAM lParam)
{
	HWND hChildWnd;
	CString msg = TEXT("");
	if ( nCode == HCBT_ACTIVATE )
	{
		hChildWnd = (HWND)wParam;

		if ( GetDlgItem(hChildWnd,IDYES)!=NULL )
		{
			msg = IDS_BUTTON_YES;
			SetDlgItemText(hChildWnd,IDYES,msg);
		}
		if ( GetDlgItem(hChildWnd,IDNO)!=NULL )
		{
			msg = IDS_BUTTON_NO;
			SetDlgItemText(hChildWnd,IDYES,msg);
		}

		UnhookWindowsHookEx(gDovHook);
	}
	return 0;
}

// 호출 예
dovMessageBox(AfxGetMainWnd()->m_hWnd, IDS_TEST_MSG, _T("MessageBox Text"), MB_YESNO);


블로거 님께 진심으로 감사;