GRAFik, Тебе это не нужно точно, ели ты трассировать полностью всё начнёш или писать инструмент для этого, тогда это нужно. Интересный пример https://twitter.com/waleedassar Чувак крут, потому что он создал инструмент для поиска уязвимостей в гуе. Да там нужно знать как это работает, но и выхлоп не плохой. А клепать мышем гуй это совсем ниочём.
Ну от Инди редко когда, что-то дельного в ответе можно дождаться, кроме бесполезного мусора. )) Может кто-то еще, что-нибудь добавит?
Ещё раз повторяю, у вас не получится создать свое уникальное гуи. Точнее эта уникальность и будет результатом опыта помноженного на время, но всё в том же ВинАпи, просто используя несколько иную механику отрисовки и обработки событий. Иначе вы не можете вырвать кусок кода из реальности оси и работать только с ним. Кроме вашего гуи, есть ещё и другие окна, табуляция, фокус и даже переписав МесседжБокс на игровом движке, эти события нужно всё так же обрабатывать. Так что не нужно изобретать велосипед и усложнять себе жизнь, шаблонных элементов диалогового окна вам более чем достаточно и не разобравшись с ними, грезить о каких-то своих феерических гуи уж точно не стоит. Начните с малого, потом научитесь рисовать и использовать текстуры для элементов и пусть все думают, что это ваш "свой гуи" ))
Код (C++): case WM_COMMAND: //отслеживаем отпускание button if (lParam != 0 && wmEvent == 0){ if (wmId>=2 && wmId<=31) KeyUp(wmId-2); } break; case WM_SETCURSOR: //на что-то нажали int mode; if (SendMessage(hRadioSwithOn, BM_GETCHECK, 0, 0)==BST_CHECKED) //включаем SwitchOn(); else if (SendMessage(hRadioSwithOff, BM_GETCHECK, 0, 0)==BST_CHECKED) //выключаем SwitchOff(); mode = -1; if (SendMessage(hRadioRadians, BM_GETCHECK, 0, 0)==BST_CHECKED) mode = 0; //Радианы else if (SendMessage(hRadioGrads, BM_GETCHECK, 0, 0)==BST_CHECKED) mode = 1; //Грады else if (SendMessage(hRadioDegrees, BM_GETCHECK, 0, 0)==BST_CHECKED) mode = 2; //Градусы if (mode>=0){ SwitchTrigo(mode); } //отслеживаем нажатие button wmEvent = HIWORD(lParam) & 0xFF; for (int i = 0; i<countGroupButtons; i++){ if ((WPARAM)hGroupButtons[i]==wParam && wmEvent==1){ KeyDown(i); break; } } SetFocus(hWnd); //сброс фокуса на основное окно break; Как я решил проблему отслеживания нажатия и отпускания контрола button. Возможно радиокнопки надо переделать. Так же button дублируется клавиатурными клавишами. Код (C++): case WM_KEYDOWN: case WM_KEYUP: { char key = wParam & 0xFF; for (int i = 0; i<30; i++) if (CodeKeys[i]==key){ if (uMsg == WM_KEYDOWN) KeyDown(i); else KeyUp(i); break; } } default: return DefWindowProc(hWnd, uMsg, wParam, lParam); } return 0; PS Оконное оболочка для эмулятора калькулятора МК-61.