ОКНА

  • Автор темы racot
  • Дата начала
R

racot

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

alexsid

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

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

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

alekssgor

Well-known member
26.05.2008
118
0
#3
Функция окна на основе маски

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>
 
E

Exclucive

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

alekssgor

Well-known member
26.05.2008
118
0
#5
Стиль окна с запрещением всех возможностей изменения его размера
Код:
hwnd = CreateWindowEx (
0,				  
szClassName,		
"Пример1",	  
WS_MINIMIZEBOX|WS_SYSMENU, 
400,	  
180,	  
544,				
375,				
HWND_DESKTOP,	 
NULL,			  
hThisInstance,	 
NULL				 
);
Добавлено: Создание элементов управления
В функции окна добавляем сообщение WM_CREATE
Код:
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;
}
 

alekssgor

Well-known member
26.05.2008
118
0
#6
а я советую тебе просто перейти на Visual studio и не парить себе мозг... Хоть там и скудный набор элементов управления, но по писать самому тебе их не придётся... Ну фреймовое окно тебе конечно придётся создать самому (а это делается очень просто), а дальше просто добавляешь диалоги в ресурсы проекта и счастье тебе))) набросал из Toolbar элементов и потом программируй их)))) ну а если любишь геморой тогда удачи))))
Совет хороший! Но если нужен минимальный размер файла то равных devC++ нет!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Средняя програмка например у меня использует около десяти элементов управления и не совсем малого кода занимает 30 кб.
А если сжать утилитой ASPack(aspack.com) исполняющий файл получается в 10kb(Просто супер).
А кто хочет использовать детский конструктор(С++Builder и т.д) и платить за форму с двумя полями ввода и кнопкой 400 кб вперёд!!!
 

alekssgor

Well-known member
26.05.2008
118
0
#7
Через обновление в программе DevC++ устанавливается библиотека RAD C++ и ссылка на справку по ней . Типа vcl в C++Builder(С основными компонентами ). Но беда таже что и в С++Builder самая простая форма с одним полем ввода около 700кб(да и визуализации нету). Так что кроме чистого С++ и WinApi использование этой программы смысла не вижу.