Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2014, 17:22   #1
Gul'ka
Пользователь
 
Аватар для Gul'ka
 
Регистрация: 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);
}
Gul'ka вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Dll библиотека C# Nickolai47 Фриланс 3 03.07.2013 22:35
БИБЛИОТЕКА (DLL) kop Помощь студентам 0 03.11.2011 00:33
библиотека DLL Federal Помощь студентам 17 05.08.2010 14:23
DLL-библиотека Lisёноk Помощь студентам 2 29.04.2010 21:00

Реклама для незарегистрированных, регистрация на форуме