На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> изменение текта кнопок в MessageBox
    можно ли каким нибудб образом изменить текст кнопок в MessageBox?
      Можно -
      ставиш hook WH_CBT перед вызовом MessageBox
      Ловиш событие  HCBT_ACTIVATE и меняеш текст в нужных тебе контролах...
        2 migel & LamerD!

        Есть способ для извращенцев! Работать должен на 99,(9)\%. У меня пашет! Так вот:

        Ставим таймер на малое количество сек (мсек):
        SetTimer(NULL, 1, 100, (TIMERPROC)TimerProc);

        Потом показываем мессагу:
        MessageBox(NULL, "lol", "Time", MB_TOPMOST | MB_OK);

        А потом в TimerProc делаем следующее:

        void TimerProc()
        {
           HWND hwnd;
           hwnd = FindWindow("#32770", "Заголовок окна, если знаешь"); // Ищем мессадж бокс
           hwnd = FindWindowEx(hwnd, NULL, "Static", NULL); // Ищем на нем статик с текстом
           SetWindowText(hwnd, "GY"); // Ставим свой текст!
           Sleep(3000);
           DestroyWindow(GetParent(hwnd)); // Дестроим мессаджжж бокс:)
        // Можно через EndDialog...
        }

        Способ для извращенцев, но ... :)
        Сообщение отредактировано: SUnteXx -
          Отлично, пошел и первый способ и второй
          А как найти все контрлы заданного типа не зная как они называются, т.е. когда я вызываю
          FindWindowEx()  с параметром NULL в названии окна
          она по умолчанию дает хзндл на первое окно а как получит хендл следующего?
            Про ID контролов:

            Запускаем Spy++ ("\%root\%\Microsoft Visual Studio\Common\Tools\SPYXX.EXE", т.е. в тулзах), а далее:

            1) Spy -> Find Window -> Кликаем на "кружок"

            2) Наводим на нужное окно (баттон тоже окно:) и кликаем OK

            3) Смотрим его ID (General -> Control ID!)

            Про следующее окно:
            ИМХО, юзай EnumWindows и GetNextWindow ...!
              Спасибо.
              Про Spy я конечно знаю меня интересовал подход с точки зрения программирования.Ну короче GetNextWindow - это оно.
                HWND hChilds = GetWindow(hDialog, GW_CHILD);
                while (hChilds)
                {
                // GetClassName if wanna filter childs by they class name
                // or implement some other filters
                hChilds = GetWindow(hChilds, GW_HWNDNEXT);
                }
                  А я бы не спошёл на такое явное извращение. Скачай готовый класс-расширение месадж бокса с codeprojet.com
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0304 ]   [ 16 queries used ]   [ Generated: 28.04.24, 01:10 GMT ]