Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ООП оболочка для win32 приложения, Как стандартный WinMain включить в класс 
:(
    Опции темы
Godfree
Дата 14.3.2010, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 19.11.2007

Репутация: нет
Всего: нет



 smile 
Есть стандартный код win32 минимального win32 приложения.
 smile 
Код

#include "windows.h"

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    static char szAppName[] = "HelloWin";
    HWND hwnd;
    MSG msg;
    WNDCLASSEX wndclass;
    HINSTANCE hInst = hInstance;

    wndclass.cbSize = sizeof(wndclass);
    wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)COLOR_WINDOW;        //(HBRUSH) GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = szAppName;
    wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    RegisterClassEx(&wndclass);
    hwnd = CreateWindow(
        szAppName, // window class name
        "The Hello Program", // window caption
        WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME ^WS_MAXIMIZEBOX, // window style
        CW_USEDEFAULT, // initial x position
        CW_USEDEFAULT, // initial y position
        500, // initial x size
        410, // initial y size
        NULL, // parent window handle
        NULL, // window menu handle
        hInstance, // program instance handle
        NULL
        ); // creation parameters
    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    } 
    return msg.wParam;
}



LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{

    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;
    static HWND hwndBut1, hwndList, hwndStat;


    switch(iMsg)
    {
    case WM_CREATE:
        hwndBut1 = CreateWindow("button", "Test", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
            10, 10, 50, 25, hwnd, NULL, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);
        hwndList = CreateWindow("listbox", "", WS_CHILD|WS_VISIBLE|LBS_STANDARD^WS_VSCROLL|LBS_MULTIPLESEL,
            70, 40, 420, 350, hwnd, NULL, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);
        hwndStat = CreateWindow("static", "Searching files in catalog C:", WS_CHILD|WS_VISIBLE|SS_LEFTNOWORDWRAP,
            70, 10, 230, 20, hwnd, NULL, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);
        return 0;

    case WM_PAINT:
        hdc = BeginPaint(hwnd, &ps);
        GetClientRect(hwnd, &rect);
        EndPaint(hwnd, &ps);
        
        return 0;



    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;

    }
    return DefWindowProc(hwnd, iMsg, wParam, lParam);
}






Как можно это все запихнуть в свой объект?
Если сделать класс WinClass и объявить вышеуказанные процедуры, как public методы, то компилятор начинает ругаться на переменные:

            HWND hwnd;
    MSG msg;
    WNDCLASSEX wndclass;
    HINSTANCE hInst = hInstance;

даже если я их выношу из методов и делаю public членами класса.
Может я не правильно описываю класс?
Я хочу сделать окно именно так - своими руками по Ч. Петзольду (и иже с ними), но при этом хочу стройности ООП.
Помогите, пожалуйста, только по существу, а не философией на тему "пользуй мэфээс, нах нуна" и т.д.

Это сообщение отредактировал(а) Godfree - 14.3.2010, 16:32
PM MAIL   Вверх
Alca
Дата 14.3.2010, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



http://forum.sources.ru/index.php?showtopi...p;#entry2468149

Добавлено через 1 минуту и 13 секунд
Вообще не видно как-ты пытаешься


--------------------
PM WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0666 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.