ОКНА

Тема в разделе "Общие вопросы по С и С++", создана пользователем racot, 30 июн 2009.

  1. racot

    racot Гость

    Проблема есть небольшая.Я не знаю как создавать и работать c виндовскими окнами(создать кнопки например и поле ввода).
    напишите только с объяснениями.
    Пишу в среде devC++
     
  2. alexsid

    alexsid Гость

    используй CreateWindow / CreateWindowEx смотри Google для примеров.
    для создания окна используется класс окна (его имя). Если нужно свое собственное то класс окна придется самому создавать
    и регистрировать в системе, если нужно стандартное типа кнопки или текстбокса, то можно использовать системные названия классов.

    Смотри RegisterClass .
    Класс определяет функцию обработчик, фоновюу кисть , курсор , иконку стили и т.п.
    Короче читай справку там все это написано.

    Функция-обработчик имеет вид типа:
    Код (Text):
    int func(myWindowID, message, param1, param2){
    switch(msg){
    case MSG_1: // do something
    break;
    .......
    }
    return 0;
    }
    предусмотренный механизм управления окном - отправка ему сообщенияЖ
    Код (Text):
    SendMessage(myWindowID, message, para1, param2);
    это заставляет функцию-обработчик окна выполнится и обработать сообщение.
     
  3. alekssgor

    alekssgor Well-Known Member

    Регистрация:
    26 май 2008
    Сообщения:
    118
    Симпатии:
    0
    Функция окна на основе маски

    Код (C++):
    void super_window( HBITMAP mask, HWND h)
    {
    BITMAP bi;
    BYTE bpp;
    DWORD TransPixel;
    DWORD pixel;
    int startx;
    INT i,j;

    HRGN Rgn, ResRgn=CreateRectRgn( 0,0,0,0);
    GetObject(mask, sizeof(BITMAP), &bi);
    bpp = bi.bmBitsPixel >> 3;
    BYTE *pBits = new BYTE[bi.bmWidth * bi.bmHeight * bpp];

    int p = GetBitmapBits(mask, bi.bmWidth * bi.bmHeight * bpp, pBits);
    TransPixel = *(DWORD*)pBits;
    TransPixel <<= 32 - bi.bmBitsPixel;

    for (i=0; i< bi.bmHeight; i++)
    {
    startx=-1;
    for(j=0; j < bi.bmWidth; j++)
    {
    pixel = *(DWORD*)(pBits + (i * bi.bmWidth + j) * bpp) << (32 - bi.bmBitsPixel);
    if(pixel != TransPixel)
    {
    if(startx < 0)
    {
    startx=j;
    }
    else if(j == ( bi.bmWidth -1))
    {
    Rgn = CreateRectRgn(startx,i,j,i+1);
    CombineRgn(ResRgn,ResRgn,Rgn,RGN_OR);
    startx =-1;
    }
    }
    else if (startx >=0)
    {
    Rgn = CreateRectRgn(startx,i,j,i + 1);
    CombineRgn(ResRgn,ResRgn,Rgn,RGN_OR);
    startx=-1;
    }
    }
    }
    delete pBits;
    SetWindowRgn(h,ResRgn,true);
    }
    <table valign="top" style='margin:0;width:100%;border:1px dashed red;'>[tr]<td align='middle' bgcolor='#ff6060' valign='top' width='1%'>
    <FONT color='#ffffff' size='+3'> ! </font>
    </td><td align="midle" valign='top' style='background:#fff;'>Используйте теги оформления кода.</td>[/tr]</table>
     
  4. Exclucive

    Exclucive Гость

    а я советую тебе просто перейти на Visual studio и не парить себе мозг... Хоть там и скудный набор элементов управления, но по писать самому тебе их не придётся... Ну фреймовое окно тебе конечно придётся создать самому (а это делается очень просто), а дальше просто добавляешь диалоги в ресурсы проекта и счастье тебе))) набросал из Toolbar элементов и потом программируй их)))) ну а если любишь геморой тогда удачи))))
     
  5. alekssgor

    alekssgor Well-Known Member

    Регистрация:
    26 май 2008
    Сообщения:
    118
    Симпатии:
    0
    Стиль окна с запрещением всех возможностей изменения его размера
    Код (Text):
    hwnd = CreateWindowEx (
    0,               
    szClassName,       
    "Пример1",     
    WS_MINIMIZEBOX|WS_SYSMENU,
    400,     
    180,     
    544,               
    375,               
    HWND_DESKTOP,    
    NULL,            
    hThisInstance,   
    NULL                 
    );
    Добавлено: Создание элементов управления
    В функции окна добавляем сообщение WM_CREATE
    Код (Text):
    case WM_CREATE:
    {
    CreateWindow("STATIC","Статический текст",WS_CHILD|WS_VISIBLE,
    10,31,150,20,hwnd,(HMENU)0,hinstance,NULL);

    hEdit = CreateWindow("EDIT","Поле ввода",
    WS_CHILD|WS_VISIBLE|ES_WANTRETURN|ES_LEFT|WS_BORDER,
    150,30,150,20,hwnd,(HMENU)ID_EDIT1,hinstance,NULL);


    hButton = CreateWindow("BUTTON","Пример кнопки",
    WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,
    310,60,75,22,hwnd,(HMENU)ID_BUTTON1,hinstance,NULL);



    hListBox = CreateWindow("LISTBOX", NULL ,WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_BORDER,
    10, 200, 507,130, hwnd, (HMENU)ID_LISTBOX, hinstance, NULL);

    break;
    }
     
  6. alekssgor

    alekssgor Well-Known Member

    Регистрация:
    26 май 2008
    Сообщения:
    118
    Симпатии:
    0
    Совет хороший! Но если нужен минимальный размер файла то равных devC++ нет!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Средняя програмка например у меня использует около десяти элементов управления и не совсем малого кода занимает 30 кб.
    А если сжать утилитой ASPack(aspack.com) исполняющий файл получается в 10kb(Просто супер).
    А кто хочет использовать детский конструктор(С++Builder и т.д) и платить за форму с двумя полями ввода и кнопкой 400 кб вперёд!!!
     
  7. alekssgor

    alekssgor Well-Known Member

    Регистрация:
    26 май 2008
    Сообщения:
    118
    Симпатии:
    0
    Через обновление в программе DevC++ устанавливается библиотека RAD C++ и ссылка на справку по ней . Типа vcl в C++Builder(С основными компонентами ). Но беда таже что и в С++Builder самая простая форма с одним полем ввода около 700кб(да и визуализации нету). Так что кроме чистого С++ и WinApi использование этой программы смысла не вижу.
     
Загрузка...

Поделиться этой страницей