Странное поведение SetDlgItemText()

Тема в разделе "WASM.WIN32", создана пользователем s0lex, 23 май 2011.

  1. s0lex

    s0lex New Member

    Публикаций:
    0
    Регистрация:
    22 май 2011
    Сообщения:
    4
    Подскажите, пожалуйста, почему не меняется текст кнопки?

    Код (Text):
    1. #include <windows.h>
    2. #include <tchar.h>
    3. #include "resource.h"
    4.  
    5. HWND hDlg;
    6.  
    7. void Run()
    8. {
    9.     SetDlgItemText(hDlg, IDC_BTN_APPLY, "lolnoob");
    10. }
    11.  
    12.  
    13. BOOL CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    14. {
    15.      switch (uMsg)
    16.      {
    17.      case WM_INITDIALOG:
    18.           return TRUE;
    19.          
    20.      case WM_COMMAND:
    21.           switch (LOWORD(wParam))
    22.           {
    23.           case IDC_BTN_APPLY:
    24.                Run();
    25.                //SetDlgItemText(hDlg, IDC_BTN_APPLY, "lolnoob");
    26.                break;
    27.           case IDOK:
    28.           case IDCANCEL:
    29.                EndDialog(hDlg, 0);
    30.                return TRUE;
    31.           }
    32.           break;
    33.      }
    34.      return FALSE;
    35. }
    36.  
    37.  
    38. int WINAPI WinMain(HINSTANCE hInst,
    39.                    HINSTANCE hPrevInst,
    40.                    PSTR      lpCmd,
    41.                    int       nShow)
    42. {
    43.     DialogBox(hInst, _T("MAINDLG"), 0, MainDlgProc);
    44.  
    45.     return 0;
    46. }
    Если ф-ю SetDlgItemText() выполнить непосредственно в процедуре диалогового окна, то всё проходит на ура.
    Если попробовать перенести её в отдельную ф-ю и вызывать уже оттуда - текст не меняется.
     
  2. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Код (Text):
    1. ...
    2. HWND g_hDlg;
    3.  
    4. void Run()
    5. {
    6.     SetDlgItemText(g_hDlg, IDC_BTN_APPLY, "lolnoob");
    7. }
    8.  
    9.  
    10. BOOL CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    11. {
    12.      switch (uMsg)
    13.      {
    14.      case WM_INITDIALOG:
    15.           g_hDlg = hDlg;
    16.           return TRUE;
    17. ...
     
  3. s0lex

    s0lex New Member

    Публикаций:
    0
    Регистрация:
    22 май 2011
    Сообщения:
    4
    rmn
    Теперь заработало. Спасибо!