如何设置“保存” Windows'文件对话框中的按钮?
题
我正在尝试在“保存”上设置文字。 Windows按钮“将文件另存为...”对话框。
我设置了挂钩,收到了消息,找到了按钮(nb。如果我打电话给“ GetWindowText()
”我看到“& Save”所以我知道它是右键)。
接下来,我使用“ SetWindowText()
”更改了文本。 (并调用“ GetWindowText()
”来检查它 - 文本是否正确)。
但是......按钮仍然显示“保存”。
我可以更改“取消”按钮使用完全相同的代码 - 没问题。关于“保存”的特别之处按钮?我怎样才能改变它。
代码(价值):
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