Как начать работу с приложениями в стиле Winforms на Win32? - PullRequest
6 голосов
/ 02 января 2011

Немного предыстории: я в основном программист на C ++, но единственный графический интерфейс, который я когда-либо делал, был на вершине платформы .NET WinForms.Я совершенно новичок в программировании Windows GUI, и, несмотря на прекрасную книгу Петцольда, я в замешательстве.

А именно, похоже, что большинство ссылок на начало работы с Win32 - все о рисовании линий, кривых и других вещей- тема, о которой (по крайней мере, в настоящее время) мне наплевать.

Мне нужен флажок со списком, разделитель и текстовое поле - что-то, что может занять менее 10 минутсделать в Winforms земли.Мне было рекомендовано использовать библиотеку WTL, которая обеспечивает реализацию всех трех этих элементов управления, но я продолжаю зацикливаться на простых вещах, таких как получение элементов управления для использования правильного шрифта и получение High DPI работает корректно .Я потратил два дня на это, и я не могу не думать, что должен быть лучший справочник для таких вещей, чем я смог найти.Книга Петцольда хороша, но она не обновлялась с момента появления Windows 95, и с момента ее публикации изменилось ОЧЕНЬ МНОГО относительно правильной разработки приложений.

Наверное, я ищусовременная книга Петцольда.Где найти такой ресурс, если есть?

Ответы [ 3 ]

4 голосов
/ 02 января 2011

Во-первых, практически нет документации (которую я когда-либо мог найти), объясняющей, как использовать WTL. Кажется, это библиотека для экспертов, для экспертов.

В таком случае вы можете выбрать один из следующих вариантов: использовать мастер приложений MFC для создания приложения или перейти по маршруту Win32 API. Сам Win32 API - это C API, MFC - это оболочка C ++ вокруг C Win32 API с добавлением модели приложения для просмотра документов.

Однако, вместо создания ваших элементов управления из кода: ближайший аналог, который имеет родной Windows API к «WinForm» - это диалоговое окно. Диалоги располагаются в файлах ресурсов, которые встраиваются во время компоновки в разрабатываемый вами EXE или DLL. Ресурс диалогового окна принимает настройку шрифта, которая автоматически применяется ко всем элементам управления в диалоговом окне, и диалоговые окна размещаются в единицах измерения, а не в пикселях, что позволяет им автоматически масштабироваться относительно шрифта, а также в настройках dpi в системе пользователя .

Если вы создаете ресурс диалога и добавляете его в простое приложение, он должен выглядеть не сложнее, чем этот, чтобы вывести диалоговое окно на экран и закрыть в ответ на нажатие кнопки OK.

#include <windows.h>
#include "resource.h"

BOOL CALLBACK MyDialogProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
  switch(uMsg){
  case WM_INITDIALOG:
    return TRUE;
  case WM_COMMAND:
    switch(LOWORD(wParam){
    case IDOK:
      EndDialog(hwnd,wParam);
    }
    return TRUE;
  }
  return FALSE;
}

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hNull,LPCTSTR strCmdLine,int nCmdShow)
{
  return DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,&DialogProc,0l);
}
2 голосов
/ 02 января 2011

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

  • WTL .Это слишком тонкий слой в Win32 API и почти десятилетие не обновлялся.Вы скоро столкнетесь с самим Win32 API, если попытаетесь сделать что-то выше простых простых примеров с ним.Бонус в том, что это очень быстро по сравнению с конкурентами.
  • MFC .Начиная с VS 2008 SP1 MFC позволяет создавать относительно современный графический интерфейс.Если вы можете жить с его странными соглашениями о кодировании и интенсивным использованием макросов, тогда это приемлемо.Он поддерживается VS IDE, но гораздо слабее, чем WinForms.
  • WxWidgets .Первоначально чувствовал себя немного как MFC, который был дополнительно сделан портативным.Он стал намного лучше после того, как люди начали использовать его и в Python.
  • QT .Это самый гибкий и мощный из них.К сожалению, это началось давным-давно, поэтому в нем есть какая-то странная странность.Это медленно в местах и ​​производит большие исполняемые файлы.Лучше всего использовать его в качестве хорошо изолированного слоя с графическим интерфейсом, а не смешивать интенсивное использование STL и повышать его до уровня.
2 голосов
/ 02 января 2011

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

Лично я использую MFC.Другие варианты действительны, но я бы на самом деле сомневался в том, чтобы вообще не использовать ничего подобного. Особенно , когда вы сталкиваетесь с типами проблем, которые у вас есть.

Можете ли вы разместить их в диалоговом окне, или вы делаете что-то необычное в обычном окне?Обычно большинство элементов управления создаются путем помещения их в конструктор диалогов.Не нужно вмешиваться в шрифт.

Можете ли вы пройтись через то, что вы пытаетесь сделать, и проблемы, которые вы видите?

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