|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.01.2014, 18:22 | #1 |
Пользователь
Регистрация: 11.02.2011
Сообщений: 69
|
dll-библиотека
Здравствуйте, может кто подсказать или помочь реализовать (платно) следующее.
Мое задание: Разработать DLL-библиотеку, которая загружается во все процессы, и добавляет еще одну кнопку в заголовок всех окон (рядом со стандартными "Закрыть", "Развернуть", "Свернуть"). Щелчок по этой кнопке должен сворачивать окна, оставляя от окна один лишь заголовок (чтобы высота клиентской области стала равна нулю), или возвращать окно в прежнее состояние. У меня есть код который рисует кнопочку и обрабатывает события. Мне нужно поместить это в dll. Помогите кто может. Заранее спасибо. Имеющийся код: HTHEME hTheme = NULL; int myHeight = 0; RECT rectBtn; bool fCustState = false; enum{HTCUSTOMBTN = HTHELP + 1}; enum{SC_CUSTOMBTN = 0xF000 - 1}; void DrawCustomBtn(HWND hWnd,bool fNormal) { RECT rectWnd; GetWindowRect(hWnd,&rectWnd); rectBtn.left=rectWnd.right-rectWnd.left - ((!hTheme)?75:150); rectBtn.right=rectBtn.left+ ((hTheme)?22:15); HDC hDC = GetWindowDC(hWnd); SetBkMode(hDC,TRANSPARENT); if(hTheme != NULL) { DrawThemeBackground(hTheme ,hDC, BP_PUSHBUTTON, ((fNormal)?PBS_NORMAL:PBS_PRESSED), &rectBtn, NULL); DrawThemeText(hTheme, hDC, BP_PUSHBUTTON, ((fNormal)?PBS_NORMAL:PBS_PRESSED), L"!", -1, DT_SINGLELINE | DT_CENTER | DT_VCENTER, 0, &rectBtn); } else { DrawFrameControl(hDC,&rectBtn, DFC_BUTTON, ((fNormal)?DFCS_BUTTONPUSH:DFCS_PUS HED)); DrawText(hDC,_T("!"), -1, &rectBtn, DT_SINGLELINE | DT_CENTER | DT_VCENTER); } ReleaseDC(hWnd,hDC); } // // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) // // PURPOSE: Processes messages for the main window. // // WM_COMMAND - process the application menu // WM_PAINT - Paint the main window // WM_DESTROY - post a quit message and return // // LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg,WPARAM wParam, LPARAM lParam ) { HDC hDC = GetWindowDC(hWnd); switch(uMsg) { case WM_CREATE: { hTheme = OpenThemeData(hWnd,L"Button"/*"Window"*/); rectBtn.left=0; rectBtn.top=GetSystemMetrics(SM_CXS IZEFRAME)+(GetSystemMetrics(SM_CYCA PTION)-GetSystemMetrics(SM_CYSMSIZE))/2- ((hTheme)?3:0); rectBtn.right=0; rectBtn.bottom=rectBtn.top+GetSyste mMetrics(SM_CYSMSIZE)-1+((hTheme)?6:0); } break; case WM_NCACTIVATE: case WM_NCPAINT: { LRESULT Res=DefWindowProc(hWnd,uMsg,wParam, lParam); DrawCustomBtn(hWnd,true); return Res; } case WM_NCHITTEST: { RECT rectWnd; RECT rectBtnLcl; ::GetWindowRect(hWnd,&rectWnd); rectBtnLcl.left=rectWnd.right- ((!hTheme)?75:150); rectBtnLcl.right=rectBtnLcl.left+ ((hTheme)?22:15); rectBtnLcl.top=rectWnd.top+GetSyste mMetrics(SM_CXSIZEFRAME)+(GetSystem Metrics(SM_CYCAPTION)-GetSystemMetrics(SM_CYSMSIZE))/2; rectBtnLcl.bottom=rectBtnLcl.top+Ge tSystemMetrics(SM_CYSMSIZE)-1; POINT pt={LOWORD(lParam),HIWORD(lParam)}; if(::PtInRect(&rectBtnLcl,pt)) return HTCUSTOMBTN; } break; case WM_NCLBUTTONDOWN: if(wParam==HTCUSTOMBTN) { RECT rectWnd; ::GetWindowRect(hWnd,&rectWnd); if (fCustState == false) { fCustState = true; myHeight = rectWnd.bottom - rectWnd.top; SetWindowPos(hWnd, hWnd, rectWnd.left, rectWnd.top, rectWnd.right - rectWnd.left, 0, SWP_NOZORDER); } else { fCustState = false; SetWindowPos(hWnd, hWnd, rectWnd.left, rectWnd.top, rectWnd.right - rectWnd.left, myHeight, SWP_NOZORDER); } DrawCustomBtn(hWnd,false); } break; case WM_NCMOUSEMOVE: if(fCustState) { if((wParam!=HTCUSTOMBTN)&&fCustStat e) DrawCustomBtn(hWnd,true); else DrawCustomBtn(hWnd,false); } break; case WM_DESTROY: ::CloseThemeData(hTheme); ::PostQuitMessage(0); break; case WM_SYSCOMMAND: if(wParam==SC_CUSTOMBTN) ::MessageBox(hWnd,_T("CustomBtn"),_ T("Msg"),0); break; } return DefWindowProc(hWnd,uMsg,wParam, lParam); } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Dll библиотека C# | Nickolai47 | Фриланс | 3 | 03.07.2013 23:35 |
БИБЛИОТЕКА (DLL) | kop | Помощь студентам | 0 | 03.11.2011 01:33 |
библиотека DLL | Federal | Помощь студентам | 17 | 05.08.2010 15:23 |
DLL-библиотека | Lisёноk | Помощь студентам | 2 | 29.04.2010 22:00 |