Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2014, 18: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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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