Эксперт
Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Диалоговые окна на WinApi.
Диалог в диалоге (Отобразить)CODE:#define WS_MINIMIZEBOX 131072
#define WS_MAXIMIZEBOX 65536
#define WS_VISIBLE 268435456
#define WS_CAPTION 12582912
#define WS_SYSMENU 524288
#define WS_CHILD 1073741824
#define COLOR_APPWORKSPACE 12
#define WM_LBUTTONDOWN 513
#define WM_COMMAND 273
#define WM_CREATE 1
#define WM_LBUTTONDOWN 513
external(INT, "RegisterClass", "RegisterClassA", "User32.dll" );
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "UnregisterClass", "UnregisterClassA", "User32.dll");
////////////////////
int WinProc=address("WindowProc");
char Class[8]={'m', 'y', 'c', 'l', 'a', 's', 's', 0};
int PWNDCLASS[10];//Структура WNDCLASS
int CLASS=address(#PWNDCLASS[0]);//Указатель на структуру класа
initialarray(#PWNDCLASS[0], 0);//Обнуляем структуру
writeaddress(WinProc, address(#PWNDCLASS[1]));//Указываем адрес функции WindowProc
writeaddress(COLOR_APPWORKSPACE, address(#PWNDCLASS[7]));//Указываем цвет диалога
writeaddress(address(#Class[0]), address(#PWNDCLASS[9]));//Указываем указатель на название класа
if (RegisterClass(CLASS)==0){messagebox("Не удалось зарегистрировать клас"); goto er;}
int Win=CreateWindow(0, address(#Class[0]), "Первое окно",
WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU,
10, 10, 500, 500, 0, 0, 0, 0);
int Win_D=CreateWindow(0, address(#Class[0]), "Дочерное окно в окне",
WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_CHILD,
10, 50, 300, 200, Win, 0, 0, 0);
//Кнопку создаем посде создания окна и получения на него HWND, а не в сообщение WM_CREATE, так как в том сообщение окно еще не записало в Win = HWND
int b1=CreateWindow(0, "BUTTON", "Кнопка в доч окне", WS_VISIBLE | WS_CHILD, 10, 10, 200, 30, Win_D, 0, 0, 0);
int Win2=CreateWindow(0, address(#Class[0]), "Второе окно",
WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU,
515, 10, 500, 200, 0, 0, 0, 0);
int b2=CreateWindow(0, "BUTTON", "Кнопка", WS_VISIBLE | WS_CHILD, 10, 10, 120, 30, Win2, 0, 0, 0);
/////////////////////
loop()sleep(10);
er:;
/*
//Тут контролы не создаем, так как в переменные Win и Win2 HWND будут записаны только после отработки функций CreateWindow!
function getmessage(WM_CREATE)
{
}
*/
function getmessage(WM_LBUTTONDOWN)
{
if (message.hwnd==Win2)//Если сообщение от второго окна
{
beep(1000, 100);
}
}
function getmessage(WM_COMMAND)
{
if (message.lparam==b1)//Если кнопка в дочерном окне
{
messagebox ("Кнопка в доч окне");
}
if (message.lparam==b2)//Если кнопка во втором окне
{
messagebox ("Кнопка");
}
}
function getmessage(WM_CLOSE)
{
UnregisterClass(address(#Class[0]), 0);
if (message.hwnd==Win)goto global er;
} |