2009-03-04 6 views
3

Windowsの[名前を付けてファイルを保存]ダイアログの[保存]ボタンにテキストを設定しようとしています。Windowsのファイルダイアログの「保存」ボタンにテキストを設定するにはどうすればよいですか?

私はフックを設定しました。メッセージを受信しました。ボタンを見つけました。(nb:「GetWindowText()」と呼んだ場合は、「&保存」を参照してください。

次は、「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" 
    } 
} 
+0

この情報に基づいて、WM_INITDIALOGの後にボタンが変更されているように見えます。フックを使用せずにダイアログの側面をカスタマイズできる拡張機能が組み込まれていませんか? – jdigital

+0

コールバックのすべての呼び出しでボタンのテキストを調べました(WM_INITDIALOGの後にかなりの数の呼び出しがあります)。テキストには常に「テスト」と表示されます(ただし、表示される内容と同じではありません)。 –

答えて

1

のカスタマイズの詳細を持っている....

「保存」ボタンで面白いことが起こっていることは間違いありませんが、このコードは投稿に挑戦します:

// 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); 
} 
0

あなたはおそらく、テキストを設定した後、ウィンドウを再描画する必要があります。

テキストを設定した後にUpdateWindow()を呼び出してみてください。直接テキストではなく、SetWindowText関数との混乱を設定する

+0

いいえ、私はそれを試みました。 –

0

使用CDM_SETCONTROLTEXTメッセージ、すなわち

SendMessage(hwnd, CDM_SETCONTROLTEXT, IDOK, L"Testing"); 

http://msdn.microsoft.com/en-us/library/ms646960(VS.85).aspxは私が最終的にそれがうまく行われ、オープン/保存ダイアログ

+0

同様に試しました... nb。 "保存"ボタンが変わっているようです。 –

+0

あなたはどのバージョンのWindowsを使用していますか?保存ダイアログを呼び出すために使用するコードを投稿できますか? – Michael

関連する問題