을 설정하는 방법에 텍스트"save"버튼을에서 Windows 파일을 대화?
문제
나가려고 설정 텍스트"save"버튼을 창의"파일로 저장..."화입니다.
나는 설정의 후크,메시지를 수신,발견 버튼(nb.If I call"GetWindowText()
"나는"저장"그래서 나는 그것의 오른쪽)이 포함되어 있습니다.
다음 변경 텍스트"를 사용하여SetWindowText()
"(라"GetWindowText()
"그것을 확인하는 텍스트는 올바른).
하지만...버튼을 여전히 말한다"저장"을 선택합니다.
나는 변경할 수 있습니다"취소"버튼을 사용하여 동일한 코드를 문제 없습니다.특별한 무엇이 있는지에 대한"Save"버튼?방법을 변경할 수 있습니다.
코드(그것은 가치가 무엇):
static UINT_PTR CALLBACK myHook(HWND hwnd, UINT msg, WPARAM, LPARAM)
{
if (msg == WM_INITDIALOG) {
wchar_t temp[100];
HWND h = GetDlgItem(GetParent(hwnd),IDOK);
GetWindowTextW(h,temp,100); // temp=="&Save"
SetWindowTextW(h,L"Testing");
GetWindowTextW(h,temp,100); // temp=="Testing"
}
}
해결책
마지막으로 그것을 만들었습니다.
나는 확신이 무언가가있는 재미로'저장'버튼 하지만 이 코드는 레슬링으로 제출:
// I replace the dialog's WindowProc with this
static WNDPROC oldProc = NULL;
static BOOL CALLBACK buttonSetter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// Set the button text on every window redraw....
if (msg == WM_ERASEBKGND) {
SetDlgItemTextW(hwnd,IDOK,L"OK");
}
return oldProc(hwnd, msg, wParam, lParam);
};
// This is the callback for the GetWriteName hook
static UINT_PTR CALLBACK GWNcallback(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HWND dlg = GetParent(hwnd);
if (msg == WM_INITDIALOG) {
oldProc = (WNDPROC)GetWindowLongPtr(dlg, GWL_WNDPROC);
if (oldProc !=0) {
SetWindowLongPtr(dlg, GWL_WNDPROC, (LONG)buttonSetter);
}
}
// We need extra redraws to make our text appear...
InvalidateRect(dlg,0,1);
}
다른 팁
당신은 아마도 다시 그리 창을 설정한 후에는 텍스트입니다.
보 UpdateWindow(후)설정 텍스트입니다.
사용 CDM_SETCONTROLTEXT 을 설정하는 메시지에 텍스트 보다는 오히려 혼란 SetWindowText 직접,즉
SendMessage(hwnd, CDM_SETCONTROLTEXT, IDOK, L"Testing");
http://msdn.microsoft.com/en-us/library/ms646960(VS.85).aspx 에 대한 더 많은 사용자 정의 열기/저장 대화 상자
제휴하지 않습니다 StackOverflow