منتدى استراحات زايد

منتدى استراحات زايد (http://vb.ma7room.com/index.php)
-   منتدى أخبار المواقع والمنتديات العربية والأجنبية (http://vb.ma7room.com/forumdisplay.php?f=183)
-   -   Static_ButtonHover (http://vb.ma7room.com/showthread.php?t=526655)

محروم.كوم 10-02-2010 06:51 AM

Static_ButtonHover
 
<div><div align="center">بسم الله الرحمن الرحيم
Static_ButtonHover
المشروع كامل مع صور أزرار جميلة
http://oman922.110mb.com/Static_ButtonHover.zip
يسمح المشروع بوضع أزرار لنافذة واجهة المستخدم الرسومية أو الـ Form
مع استخدام ثلاث صور و مع عبارة نصية لهذه الأزرار منما يعطي هيئة جميلة
لها و مظهر جذاب...وكذالك يسمح بوضع خلفية صورة لنافذة واجهة المستخدم
الرسومية ... يمكنك تحديد أو تعديل سمات هذه الأزرة نوع الخط حجم الخط
و عرضه و لون العبارة النصية في هذه الأزرة .
الصور الثلاثة كتالي
NORMAL_hBMP
تظهر هذه الصورة بالوضع الإعتيادي لزر
PRESS_hBMP
تظهر هذه الصورة عند الضغط على الزر
OVER_hBMP
over إختصار لـ Hover
تظهر هذه الصورة عند ما يحوم مؤشر الماوس و يقف على الزر

كما يتضمن المشروع دوال لتعامل مع المخزن أوالمورد Resource بحيث يمكنك
رفع الصور من بعد تخزينها بمخزن البرنامج و تدعم هذه الدوال تقريبا جميع أنواع
الصور الشائعة و منها BMP, PNG, GIF, JPEG وذالك باستخدام مكتبة الصور
و الجرافكس gdiplus.dll وكذالك دوال لرفع الصور من ملفاتها

المشروع مصمم على السي بلس باستخدام محرر المفكرة و تم ضغط الأمثلة على
الضاغط Borland C++ Compiler 5.5 و من حيث أن تصميمه تم ليلائم هذا الضاغط
القديم فيمكنه بذالك العمل على محررات ميكروسوفت الإصدار خمسة و سته من لغة
سي بلس و حتى على مكتبة MFC لمحررات سي بلس ميكروسوفت .
في رعاية الله وحفظه .

صور لأمثلة المشروع

http://img837.imageshack.us/img837/833/21159543.png

http://img827.imageshack.us/img827/381/38144446.png

http://img194.imageshack.us/img194/6237/24545030.png

http://img413.imageshack.us/img413/3671/98140610.png

http://img97.imageshack.us/img97/4338/69635145.png

كودات المشروع
Static_ButtonHover.h
<div style="margin:20px; margin-top:5px"> كود:
#include
#include
static HANDLE HandlesArray[10000][6];
static HANDLE BkGndSArray[10000][2];
HWND HOVER_HWND;
HHOOK HOOKhandleA,HOOKhandleB;
WNDPROC WPhandle;
static int IntVariableArray[7];
static int FontArrayA[10000][3];
static LPCTSTR FontArrayB[10000];
LRESULT CALLBACK ButtonHoverProcA(int nCode,WPARAM wParam,LPARAM lParam);
LRESULT CALLBACK ButtonHoverProcB(int nCode,WPARAM wParam,LPARAM lParam);
LRESULT CALLBACK ButtonHoverProcC(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
HWND CreateButtonHover(HWND hWndParent,LPCTSTR Text,int Left, int Top,int Width,
int Height,HBITMAP NORMAL_hBMP,HBITMAP PRESS_hBMP,HBITMAP OVER_hBMP,
int WinShow = 1,COLORREF TEXTCOLOOR = 0,int FontSize = 0,int FontWidth = 600,LPCTSTR FontName = "");
int ButtonHoverDelete(HWND ButtonhWnd,int BOOLImageDelete = 0);
int ButtonHoverOptions(HWND ButtonhWnd,LPCTSTR FontName,int FontSize,int FontWidth,COLORREF TEXTCOLOOR = -1,LPCTSTR Text = 0);
int SetButtonHoverState(HWND ButtonhWnd,BOOL ENABLE = true,BOOL SHOW = true,BOOL FOCUS = true,BOOL ONTOP = true);
int SetGuiBackGroundImage(HWND hWndParent,HBITMAP BKGND_hBMP);
HBITMAP ImageFromFreeResource(LPCTSTR lpName,LPCTSTR lpType,HMODULE hModule = 0);
HBITMAP ImageFromFile(char* ImageFileName);
HBITMAP LoadBitmap_FromResources(LPCTSTR Bitmap_ResName);
HBITMAP LoadBitmap_FromFile(LPCTSTR FileName);
int ArraySearchA(HWND HWnd,int ColsNo);
int ArraySearchB(HWND HWnd,int ColsNo);
void atButtonHoverExit(void);

HWND CreateButtonHover(HWND hWndParent,LPCTSTR Text,int Left, int Top,int Width,
int Height,HBITMAP NORMAL_hBMP,HBITMAP PRESS_hBMP,HBITMAP OVER_hBMP,
int WinShow,COLORREF TEXTCOLOOR,int FontSize,int FontWidth,LPCTSTR FontName)
{
int countA = IntVariableArray[0];
int CreateStatic = IntVariableArray[2];
int iCreateStatic = IntVariableArray[3];
if (countA > 10000)
{ SetLastError(-1);
return 0;}
if (!IsWindow(hWndParent))
{ SetLastError(-2);
return 0;}
HMODULE HMOD = GetModuleHandle(0);
if (!HMOD)
{SetLastError(-3);
return 0;}
if (!HOOKhandleA)
{
DWORD lpdwProcessId;
HOOKhandleA = SetWindowsHookEx(WH_MOUSE,ButtonHoverProcA,HMOD,Ge tWindowThreadProcessId(hWndParent,&lpdwProcessId)) ;
if (!HOOKhandleA)
{SetLastError(-4);
return 0;}
HOOKhandleB = SetWindowsHookEx(WH_CALLWNDPROC,ButtonHoverProcB,H MOD,GetWindowThreadProcessId(hWndParent,&lpdwProce ssId));
if (!HOOKhandleB)
{SetLastError(-5);
return 0;}
atexit(atButtonHoverExit);
}

if (!HandlesArray[0][0]) countA = 0; else countA++;
IntVariableArray[0] = countA;
HandlesArray[countA][0] = (HANDLE) NORMAL_hBMP;
HandlesArray[countA][1] = (HANDLE) PRESS_hBMP;
HandlesArray[countA][2] = (HANDLE) OVER_hBMP;

int iFontSize = FontSize;
if (!iFontSize) iFontSize = ((Height + 1) / 2);
iFontSize += iFontSize -1;
FontArrayA[countA][0] = (int)TEXTCOLOOR;
FontArrayA[countA][1] = iFontSize;
FontArrayA[countA][2] = FontWidth;
FontArrayB[countA] = FontName;
CreateStatic = 1;
IntVariableArray[2] = CreateStatic;
iCreateStatic = 1;
IntVariableArray[3] = iCreateStatic;
DWORD dwStyle = WS_CHILD|WS_VISIBLE|0x00000040|SS_BITMAP;
HWND HSTATICA = CreateWindowEx(0,"STATIC","",dwStyle,Left,Top,Widt h,Height,hWndParent,0,HMOD,0);
if (!HSTATICA)
{countA--;
IntVariableArray[0] = countA;
SetLastError(-6);
return 0;}
HandlesArray[countA][3] = (HANDLE) HSTATICA;
CreateStatic = 0;
IntVariableArray[2] = CreateStatic;
ShowWindow(HSTATICA,WinShow);
dwStyle = SS_NOTIFY|SS_CENTERIMAGE|SS_CENTER|WS_CHILD|WS_VIS IBLE;
CreateStatic = 2;
IntVariableArray[2] = CreateStatic;
HWND HSTATICB = CreateWindowEx(0,"STATIC",Text,dwStyle,Left,Top,Wi dth,Height,hWndParent,0,HMOD,0);
if (!HSTATICB)
{countA--;
IntVariableArray[0] = countA;
SetLastError(-7);
return 0;}
HandlesArray[countA][4] = (HANDLE) HSTATICB;
CreateStatic = 0;
IntVariableArray[2] = CreateStatic;
ShowWindow(HSTATICB,WinShow);
HWND HSTATICC = CreateWindowEx(0,"STATIC","",dwStyle,0,0,0,0,hWndP arent,0,HMOD,0);
if (!HSTATICC)
{countA--;
IntVariableArray[0] = countA;
SetLastError(-8);
return 0;}
HandlesArray[countA][5] = (HANDLE) HSTATICC;
SendMessage(HSTATICA,STM_SETIMAGE,IMAGE_BITMAP,(LP ARAM) NORMAL_hBMP);
SetLastError(0);
return HSTATICC;
}

LRESULT CALLBACK ButtonHoverProcA(int nCode,WPARAM wParam,LPARAM lParam)
{
if (nCode < 0)
return CallNextHookEx(HOOKhandleA,nCode,wParam,lParam);
UINT uiMsg = (UINT) wParam;
MOUSEHOOKSTRUCT* MHS = (MOUSEHOOKSTRUCT*) lParam;
HWND hwnd = MHS->hwnd;
int Element = ArraySearchA(hwnd,4);
if (Element != -1){
int TEST_WM_MOUSEFIRST = IntVariableArray[4];
int TEST_WM_LBUTTONDOWN = IntVariableArray[5];
HWND HSTATICA = (HWND) HandlesArray[Element][3];
HWND HSTATICB = (HWND) HandlesArray[Element][4];
HWND HSTATICC = (HWND) HandlesArray[Element][5];
HBITMAP NORMAL_hBMP = (HBITMAP) HandlesArray[Element][0];
HBITMAP PRESS_hBMP = (HBITMAP) HandlesArray[Element][1];
HBITMAP OVER_hBMP = (HBITMAP) HandlesArray[Element][2];
if ( uiMsg == WM_MOUSEFIRST && TEST_WM_MOUSEFIRST == 0 ) {
HOVER_HWND = HSTATICB;
SendMessage(HSTATICA,STM_SETIMAGE,IMAGE_BITMAP,(LP ARAM) OVER_hBMP);
RedrawWindow(HSTATICB,0,0,RDW_INVALIDATE | RDW_UPDATENOW);
TEST_WM_MOUSEFIRST = 1;
IntVariableArray[4] = TEST_WM_MOUSEFIRST;
} else {
if ( HOVER_HWND == HSTATICB ) {
if ( uiMsg == WM_LBUTTONDOWN && TEST_WM_LBUTTONDOWN == 0) {
SendMessage(HSTATICA,STM_SETIMAGE,IMAGE_BITMAP,(LP ARAM) PRESS_hBMP);
RedrawWindow(HSTATICB,0,0,RDW_INVALIDATE | RDW_UPDATENOW);
TEST_WM_LBUTTONDOWN = 1;
IntVariableArray[5] = TEST_WM_LBUTTONDOWN;
}
if ( uiMsg == WM_LBUTTONUP && TEST_WM_LBUTTONDOWN == 1) {
SendMessage(HSTATICA,STM_SETIMAGE,IMAGE_BITMAP,(LP ARAM) OVER_hBMP);
RedrawWindow(HSTATICB,0,0,RDW_INVALIDATE | RDW_UPDATENOW);
TEST_WM_LBUTTONDOWN = 0;
IntVariableArray[5] = TEST_WM_LBUTTONDOWN;
SendMessage(GetParent(HSTATICC),WM_COMMAND,
MAKEWPARAM(GetDlgCtrlID(HSTATICC),0),(LPARAM)HSTAT ICC);
}} else {
if ( uiMsg == WM_LBUTTONUP && TEST_WM_LBUTTONDOWN == 1 ) {
Element = ArraySearchA(HOVER_HWND,4);
HWND HSTATICA = (HWND) HandlesArray[Element][3];
HWND HSTATICB = (HWND) HandlesArray[Element][4];
SendMessage(HSTATICA,STM_SETIMAGE,IMAGE_BITMAP,(LP ARAM) NORMAL_hBMP);
RedrawWindow(HSTATICB,0,0,RDW_INVALIDATE | RDW_UPDATENOW);
TEST_WM_LBUTTONDOWN = 0;
IntVariableArray[5] = TEST_WM_LBUTTONDOWN;
Element = ArraySearchA(hwnd,4);
HSTATICA = (HWND) HandlesArray[Element][3];
HSTATICB = (HWND) HandlesArray[Element][4];
HOVER_HWND = HSTATICB;
SendMessage(HSTATICA,STM_SETIMAGE,IMAGE_BITMAP,(LP ARAM) OVER_hBMP);
RedrawWindow(HSTATICB,0,0,RDW_INVALIDATE | RDW_UPDATENOW);
TEST_WM_MOUSEFIRST = 1;
IntVariableArray[4] = TEST_WM_MOUSEFIRST;
}}}
} else {
int TEST_WM_MOUSEFIRST = IntVariableArray[4];
int TEST_WM_LBUTTONDOWN = IntVariableArray[5];
if ( TEST_WM_LBUTTONDOWN == 1 ) {
if ( uiMsg == WM_LBUTTONUP ) {
Element = ArraySearchA(HOVER_HWND,4);
HWND HSTATICA = (HWND) HandlesArray[Element][3];
HWND HSTATICB = (HWND) HandlesArray[Element][4];
HBITMAP NORMAL_hBMP = (HBITMAP) HandlesArray[Element][0];
SendMessage(HSTATICA,STM_SETIMAGE,IMAGE_BITMAP,(LP ARAM) NORMAL_hBMP);
RedrawWindow(HSTATICB,0,0,RDW_INVALIDATE | RDW_UPDATENOW);
TEST_WM_LBUTTONDOWN = 0;
IntVariableArray[5] = TEST_WM_LBUTTONDOWN;
}} else {
if ( TEST_WM_MOUSEFIRST == 1 ) {
Element = ArraySearchA(HOVER_HWND,4);
HWND HSTATICA = (HWND) HandlesArray[Element][3];
HWND HSTATICB = (HWND) HandlesArray[Element][4];
HBITMAP NORMAL_hBMP = (HBITMAP) HandlesArray[Element][0];
SendMessage(HSTATICA,STM_SETIMAGE,IMAGE_BITMAP,(LP ARAM) NORMAL_hBMP);
RedrawWindow(HSTATICB,0,0,RDW_INVALIDATE | RDW_UPDATENOW);
TEST_WM_MOUSEFIRST = 0;
IntVariableArray[4] = TEST_WM_MOUSEFIRST;
}}}
return CallNextHookEx(HOOKhandleA,nCode,wParam,lParam);
}


LRESULT CALLBACK ButtonHoverProcB(int nCode,WPARAM wParam,LPARAM lParam)
{
if (nCode < 0)
return CallNextHookEx(HOOKhandleB,nCode,wParam,lParam);
CWPSTRUCT* CPST = (CWPSTRUCT*) lParam;
int iCreateStatic = IntVariableArray[3];
int SETERASEBKGND = IntVariableArray[6];
int BOOLA = CPST->message == WM_CTLCOLORSTATIC && iCreateStatic == 1;
int BOOLB = CPST->message == WM_ERASEBKGND && SETERASEBKGND == 1;
if (BOOLA || BOOLB)
{
if (!WPhandle)
{
WPhandle = (WNDPROC) SetWindowLongPtr(CPST->hwnd,GWL_WNDPROC,(LONG) ButtonHoverProcC);
} else {
SetWindowLongPtr(CPST->hwnd,GWL_WNDPROC,(LONG) ButtonHoverProcC);
}}
return CallNextHookEx(HOOKhandleB,nCode,wParam,lParam);
}


LRESULT CALLBACK ButtonHoverProcC(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
if (WM_COMMAND == message)
{
HWND CtrlHwnd = (HWND) lParam;
int ElementB = ArraySearchA(CtrlHwnd,4);
if (ElementB != -1)
{
int notification = HIWORD(wParam);
if (notification == 1 || notification == 2 || notification == 3)
{
SendMessage(GetParent((HWND) HandlesArray[ElementB][5]),WM_COMMAND,
MAKEWPARAM(GetDlgCtrlID((HWND) HandlesArray[ElementB][5]),notification),
(LPARAM) (HWND) HandlesArray[ElementB][5]);
}}}
if (WM_CTLCOLORSTATIC == message)
{
int countA = IntVariableArray[0];
int CreateStatic = IntVariableArray[2];
int iCreateStatic = IntVariableArray[3];
iCreateStatic = 0;
IntVariableArray[3] = iCreateStatic;
int ElementA = ArraySearchA(WindowFromDC((HDC)wParam),3);
int ElementB = ArraySearchA(WindowFromDC((HDC)wParam),4);
if (ElementA != -1 || ElementB != -1 || CreateStatic == 1 || CreateStatic == 2)
{
SetBkMode((HDC)wParam, TRANSPARENT);
if (CreateStatic == 2){
SetTextColor((HDC)wParam,(COLORREF) FontArrayA[countA][0]);
HFONT hFont = CreateFont(FontArrayA[countA][1],
0,0,0,FontArrayA[countA][2],FALSE,FALSE,FALSE,
DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,
FontArrayB[countA]);
SelectObject((HDC)wParam, hFont);}
if (ElementB != -1) {
SetTextColor((HDC)wParam,(COLORREF) FontArrayA[ElementB][0]);
HFONT hFont = CreateFont(FontArrayA[ElementB][1],
0,0,0,FontArrayA[ElementB][2],FALSE,FALSE,FALSE,
DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,
FontArrayB[ElementB]);
SelectObject((HDC)wParam, hFont);}
CreateStatic = 0;
IntVariableArray[2] = CreateStatic;
return (int) GetStockObject(NULL_BRUSH);
}}
if (WM_ERASEBKGND == message)
{
int SETERASEBKGND = IntVariableArray[6];
SETERASEBKGND = 0;
IntVariableArray[6] = SETERASEBKGND;
HDC hDC = (HDC) wParam;
HWND hWnd = WindowFromDC(hDC);
int ElementC = ArraySearchB(hWnd,0);
if (ElementC != -1)
{
HBITMAP BKGND_hBMP = (HBITMAP) BkGndSArray[ElementC][1];
HDC hdcMemDC = CreateCompatibleDC(hDC);
HGDIOBJ Object = SelectObject(hdcMemDC,BKGND_hBMP);
RECT rcClient;
GetClientRect(hWnd, &rcClient);
int WinW = rcClient.right - rcClient.left;
int WinH = rcClient.bottom - rcClient.top;
BITMAPINFO lpbi;
lpbi.bmiHeader.biSize = sizeof(lpbi.bmiHeader);
GetDIBits(CreateCompatibleDC(0),BKGND_hBMP,0,0,0,& lpbi,0);
int ImageW = lpbi.bmiHeader.biWidth;
int ImageH = lpbi.bmiHeader.biHeight;
StretchBlt(hDC,0,0,WinW,WinH,hdcMemDC, 0,0,ImageW,ImageH,SRCCOPY);
SelectObject(hdcMemDC,Object);
return 1;
}}
return CallWindowProc(WPhandle,hWnd,message,wParam,lParam );

}

int SetButtonHoverState(HWND ButtonhWnd,BOOL ENABLE,BOOL SHOW,BOOL FOCUS,BOOL ONTOP)
{
int BOOL = 0,countA = IntVariableArray[0];
for(int Element = 0; Element


الساعة الآن 12:34 AM

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.5.2 TranZ By Almuhajir


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227