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

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

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

Ответ
 
Опции темы
Старый 09.01.2014, 18:22   #1
Gul'ka
Форумчанин
 
Аватар для Gul'ka
 
Регистрация: 11.02.2011
Сообщений: 69
Репутация: 10
Восклицание 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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


12:12.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru