Ресурсы и контроль позиции в программировании на win32 - PullRequest
0 голосов
/ 14 декабря 2010

Я новичок в программировании на win32 и у меня есть несколько вопросов о ресурсах.

Должен ли я использовать редактор ресурсов (из Visual Studio) для создания элементов управления? Я знаю, что это можно отредактировать с помощью редактора Resource Hacker. Как это предотвратить?

Графический интерфейс, созданный в Windows Forms (.net) или Borland Delphi (VCL), нельзя редактировать с помощью res hacker, возможно, он создает элементы управления во время выполнения.

Является ли бессмысленной работой сделать все элементы управления во время выполнения, чтобы предотвратить их редактирование res hacker?

HWND hButton = CreateWindowEx(
    0,
    _T("BUTTON"),
    _T("Click!"),
    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_LEFTTEXT,
    5, 5, 80, 25, hwnd, (HMENU)IDC_BUTTON1,
    GetModuleHandle(NULL),
    NULL
);

Второй вопрос: разве нет простого способа установить положение элемента управления в в правом верхнем углу родительского окна?

Сегодня я делаю это следующим образом:

case WM_SIZE:
    {
        HWND hButton;
        RECT rcParent, rcButton;

        hButton = GetDlgItem(hwnd, IDC_BUTTON1);

        GetClientRect(hwnd, &rcParent);
        GetClientRect(hButton, &rcButton);

        if(!SetWindowPos(hButton, 0, rcParent.right - (rcButton.right - rcButton.left + 5), 5, 0, 0, SWP_NOSIZE))
        {
            MessageBox(hwnd, _T("Error at WM_SIZE"), _T("Error!"), MB_OK | MB_ICONERROR);
        }
    }
    break;

Есть ли что-то вроде Anchors в чистом программировании на win32?

Ответы [ 3 ]

3 голосов
/ 14 декабря 2010

Формат файла ресурсов для диалогов древний.Единственное, что в его пользу - это абстракция диалогового блока, которая означает, что диалоговые окна автоматически масштабируются с учетом предпочтительного для пользователя шрифта и параметров отображения точек на дюйм.

Кроме этого, в формате диалога нет поддержки дляякоря.К сожалению, Microsoft не выпустила новый инструментарий для создания пользовательского интерфейса, однако для собственной разработки, поэтому для собственных приложений Win32 вы застряли, создавая / позиционируя свои элементы управления во время выполнения вручную для любой задачи, для которой не справляются ресурсы диалога.

WPF явно лучше, но требует .NET

Я не вижу смысла запрещать ре-хакерство тем или иным способом.Что вы получаете, предотвращая это?Если ваши собственные навыки разметки настолько плохи, что люди захотят изменить их диалоги «незаконно», тогда ... ну, в общем, все, что я могу сказать.

Подводя итог:

  • Бессмысленно пытаться защитить макеты диалогов.Чего вы можете надеяться достичь, ограничивая то, к чему люди прибегнут только в том случае, если ваши собственные макеты все равно будут # @% ^.
  • Тем не менее, вы, вероятно, захотите создать элементы управления во время выполнения, так как отсутствует формат ресурса диалогасовременные функции, такие как якоря.Несмотря на то, что было бы неплохо продолжить практику проектирования форм в единицах, основанных на метриках шрифта, а не на пикселях.
  • Если вам нужна система компоновки «формы» перед сборкой с якорями, Win32 не может вам помочь.Инфраструктура QT, если вам нужно кроссплатформенное решение c ++ или переход на .NET WPF, являются мощными альтернативами, которые могут позволить вам использовать существующий код, не относящийся к пользовательскому интерфейсу.
1 голос
/ 14 декабря 2010

Это бессмысленная работа сделать все элементы управления по времени выполнения, чтобы предотвратить его редактирование Res Hacker?

Это не бессмысленно, это всего лишь дополнительная работа. Вам также понадобится кодировать редактор ресурсов и / или менеджер раскладки, чтобы упростить вашу работу. Вы можете определить и обработать свой собственный файл определения ресурса, и поместить его как пользовательский ресурс.

Есть ли что-то вроде якорей в чистое программирование на win32?

Нет менеджера компоновки в чистом win32. Но вы можете найти бесплатный исходный код для этого. Довольно просто сделать минимальный менеджер раскладки.

0 голосов
/ 14 декабря 2010

Привет, вероятно, нет, потому что Win32 API является базой для большинства всех графических библиотек в Windows.Что я могу порекомендовать вам использовать некоторые графические библиотеки, если вы можете сделать это в своем проекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...