//============================================================= UserPipePage::UserPipePage(QWidget *parent):QWidget(parent) { QGroupBox *UserPipe=new QGroupBox(tr("User's Own Segmentation Pipeline")); PaintFilter=new QListWidget; PaintFilter->setViewMode(QListView::IconMode); PaintFilter->setIconSize(QSize(90, 90)); PaintFilter->setMovement(QListView::Static); PaintFilter->setMaximumHeight(250); StartPipe=new QPushButton("Start PipeLine"); SourceLabel=new QLabel(tr("Source Filter")); UsedLabel=new QLabel(tr("Used Filter")); AddItem=new QPushButton(tr("Add Filter")); ClearItem=new QPushButton(tr("Clear All")); SourceFilter=new QListWidget; UsedFilter=new QListWidget; //UsedFilter->setMaximumWidth(170); QHBoxLayout *listLayout=new QHBoxLayout; listLayout->addWidget(SourceFilter); listLayout->addWidget(UsedFilter); QHBoxLayout *labelLayout=new QHBoxLayout; labelLayout->addWidget(SourceLabel); labelLayout->addWidget(UsedLabel); QHBoxLayout *buttonLayout=new QHBoxLayout; buttonLayout->addWidget(AddItem); buttonLayout->addWidget(ClearItem); QVBoxLayout *pipeLayout=new QVBoxLayout; pipeLayout->addWidget(PaintFilter); pipeLayout->addLayout(labelLayout); pipeLayout->addLayout(listLayout); pipeLayout->addLayout(buttonLayout); pipeLayout->addWidget(StartPipe); UserPipe->setLayout(pipeLayout); QVBoxLayout *mainLayout=new QVBoxLayout; mainLayout->addWidget(UserPipe); mainLayout->addStretch(1); setLayout(mainLayout); connect(AddItem,SIGNAL(clicked()),this,SLOT(ADDItem())); connect(ClearItem,SIGNAL(clicked()),UsedFilter,SLOT(clear())); connect(this,SIGNAL(countChanged()),this,SLOT(CreatIcon())); connect(ClearItem,SIGNAL(clicked()),PaintFilter,SLOT(clear())); connect(StartPipe,SIGNAL(clicked()),this,SLOT(CallPipeline())); }
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { // код уведомления UINT idChild = LOWORD(wParam); // идентификатор дочернего окна HWND hwndChild = (HWND)lParam; // дескриптор дочернего PAINTSTRUCT ps; switch (message){ case WM_CREATE:{ PWINDOWINFO pwi = malloc(sizeof(WINDOWINFO)); if (!pwi){ CloseWindowMy(hwnd); break; } GetWindowInfo(hwnd, pwi); int w = pwi->rcClient.right - pwi->rcClient.left; int h = pwi->rcClient.bottom - pwi->rcClient.top; free(pwi); HWND hwndExit = CreateWindowA("button", "закрыть", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 0, h - 30, w / 2, 30, hwnd, (HMENU)ID_BUTTON_EXIT, NULL, NULL); HWND hwndTurn = CreateWindowA("button", "свернуть", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, w / 2, h - 30, w / 2, 30, hwnd, (HMENU)ID_BUTTON_TURN, NULL, NULL); HWND hwndAutoRun = CreateWindowA("button", NULL, WS_CHILD | BS_AUTOCHECKBOX | WS_VISIBLE, 300, 131, 15, 15, hwnd, (HMENU)ID_BUTTON_AUTORUN, NULL, NULL); HWND hwndHotKey = CreateWindowA("Edit", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_READONLY, 230, 10, 50, 20, hwnd, (HMENU)ID_EDIT_HOTKEY, NULL, NULL); glbOldEditProc = SetWindowLongW(hwndHotKey, GWL_WNDPROC, (LONG)newEditProc); //замена процесса обработки сообщений едита ShowWindow(hwndHotKey, SW_NORMAL); ShowWindow(hwndExit, SW_NORMAL); ShowWindow(hwndAutoRun, SW_NORMAL); ShowWindow(hwndTurn, SW_NORMAL); UINT ChekAutoRunResult = ChekAutoRun(); //проверяем, есть ли автозагрузка if (ChekAutoRunResult == MYERROR){ CloseWindowMy(hwnd); break; } else if (ChekAutoRunResult == SUCCESS) SendMessageA(hwndAutoRun, BM_SETCHECK, 1, 0); //устанавливаем галочку автозагрузки, если она есть CreatIcon(hwnd); INT hotKeyCode = SetHotKeyToEdit(hwndHotKey); if (hotKeyCode == MYERROR){//установка горячей клавиши CloseWindowMy(hwnd); break; } pInitHotKeyDll(hotKeyCode,hwndHotKey); //в длл ее break; } case WM_ICON:{ switch (lParam) { case WM_LBUTTONDBLCLK:{ ShowWindow(hwnd, SW_NORMAL); // работа с иконкой break; } default: break; } break; } case WM_COMMAND:{ if (idChild == ID_BUTTON_EXIT){ CloseWindowMy(hwnd); } if (idChild == ID_BUTTON_TURN){ ShowWindow(hwnd, SW_HIDE); } if (idChild == ID_BUTTON_AUTORUN){ // если захотели автозагрузку LRESULT result = SendMessageA(hwndChild, BM_GETCHECK, 0, 0); if (result == BST_CHECKED){ //если галочка ставится char *szFileName = malloc(MAX_LENGTH); if (!szFileName){ CloseWindowMy(hwnd); break; } memset(szFileName, 0, MAX_LENGTH); GetModuleFileNameA(NULL, szFileName, MAX_PATH); if (SetAutoRunToReg((LPBYTE)szFileName, strlen(szFileName)) == MYERROR){//добавляем наше приложение в автозагрузку glbPaintError = MYERROR; SendMessageA(hwndChild, BM_SETCHECK, 0, 0); // если вдруг что-то пошло не так, выводим ошибку InvalidateRect(hwnd, 0, 0); SendMessageA(hwnd, WM_PAINT, 0,0); } else{ glbPaintError = SUCCESS; InvalidateRect(hwnd, 0,0); SendMessageA(hwnd, WM_PAINT, 0, 0); } } else { if (SetAutoRunToReg(NULL, 0) == MYERROR){//удаляем наше приложение из автозагрузки dsfdsSDFDSFsdfdasdsadASDSADfdfdsfSDFDSS glbPaintError = MYERROR; SendMessageA(hwndChild, BM_SETCHECK, 1, 0); InvalidateRect(hwnd, 0, 0); SendMessageA(hwnd, WM_PAINT, 0,0); } else{ glbPaintError = SUCCESS; InvalidateRect(hwnd, 0, 0); SendMessageA(hwnd, WM_PAINT, 0, 0); } } } break; } case WM_PAINT:{ HDC hdc = BeginPaint(hwnd, &ps); HBRUSH hBrush = CreateSolidBrush(RGB(0xff, 0xff, 0xff)); HPEN hPen = CreatePen(PS_SOLID, 2, RGB(0xff, 0xff, 0xff)); SelectObject(hdc, hPen); SelectObject(hdc, hBrush); WINDOWINFO wi; GetWindowInfo(hwnd, &wi); int w = wi.rcClient.right - wi.rcClient.left; int h = wi.rcClient.bottom - wi.rcClient.top; Rectangle(hdc, 0, 0, w, h); TextOutA(hdc, 10, 10, "Клавиша для переключения:", 25); TextOutA(hdc, 10, 30, "Для смены клавиши, нажмите мышкой на рамку,", 42); TextOutA(hdc, 10, 50, "Затем нажмите нужную клавишу из списка:", 39); TextOutA(hdc, 10, 70, "1. Shift", 8); TextOutA(hdc, 10, 85, "2. Pause", 8); TextOutA(hdc, 10, 100, "3. ctrl", 7); TextOutA(hdc, 10, 130, "Запуск Свичера при загрузке Windows:", 36); if (glbPaintError == MYERROR){ TextOutA(hdc, 10, 115, "Не удается изменить состояние автозагрузки.", 43); } EndPaint(hwnd, &ps); } default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }