[Ttssh2-commit] [4467] バージョンダイアログの背景に、ちょっとしたグラフィックエフェクトを追加した。

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2011年 5月 8日 (日) 20:58:42 JST


Revision: 4467
          http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4467
Author:   yutakapon
Date:     2011-05-08 20:58:42 +0900 (Sun, 08 May 2011)

Log Message:
-----------
バージョンダイアログの背景に、ちょっとしたグラフィックエフェクトを追加した。
将来的には、マウスカーソルの移動に合わせて、エフェクトを動的に変化させたい。

Modified Paths:
--------------
    trunk/teraterm/ttpdlg/ttdlg.c


-------------- next part --------------
Modified: trunk/teraterm/ttpdlg/ttdlg.c
===================================================================
--- trunk/teraterm/ttpdlg/ttdlg.c	2011-05-03 15:27:51 UTC (rev 4466)
+++ trunk/teraterm/ttpdlg/ttdlg.c	2011-05-08 11:58:42 UTC (rev 4467)
@@ -2663,6 +2663,19 @@
 	char uimsg[MAX_UIMSG], uimsg2[MAX_UIMSG];
 	LOGFONT logfont;
 	HFONT font;
+	// for animation
+	static HDC dlgdc = NULL;
+	static int dlgw, dlgh;
+	static HBITMAP dlgbmp = NULL, dlgprevbmp = NULL;
+	static LPDWORD dlgpixel = NULL;
+	static HICON dlghicon = NULL;
+	//const int ID_EFFECT_TIMER = 1;
+	RECT dlgrc = {0};
+	BITMAPINFO       bmi;
+	BITMAPINFOHEADER bmiHeader;
+	PAINTSTRUCT ps;
+	int x, y;
+#define POS(x,y) ((x) + (y)*dlgw)
 
 	switch (Message) {
 		case WM_INITDIALOG:
@@ -2702,7 +2715,13 @@
 
 				hicon = LoadImage(hInst, MAKEINTRESOURCE(IDI_TTERM),
 								  IMAGE_ICON, 32, 32, fuLoad);
+#if 0
 				SendDlgItemMessage(Dialog, IDC_TT_ICON, STM_SETICON, (WPARAM)hicon, 0);
+#else
+				// Picture Control ‚É•`‰æ‚·‚é‚ƁA‚È‚º‚©“§‰ßF‚ª“§‰ß‚ɂȂ炸A•‚Æ‚È‚Á‚Ä‚µ‚Ü‚¤‚½‚߁A
+				// WM_PAINT ‚Å•`‰æ‚·‚éB
+				dlghicon = hicon;
+#endif
 			}
 
 			GetWindowText(Dialog, uimsg2, sizeof(uimsg2));
@@ -2784,22 +2803,132 @@
 			// ƒƒbƒZ[ƒW‚ªE‚¦‚È‚¢B(2005.4.5 yutaka)
 			do_subclass_window(GetDlgItem(Dialog, IDC_AUTHOR_URL), &author_url_class);
 			do_subclass_window(GetDlgItem(Dialog, IDC_FORUM_URL), &forum_url_class);
+
+			/*
+			 * ƒ_ƒCƒAƒƒO‚̃rƒbƒgƒ}ƒbƒv‰»‚ðs‚¢A”wŒi‚ɃGƒtƒFƒNƒg‚ð‚©‚¯‚ç‚ê‚é‚悤‚É‚·‚éB
+			 * (2011.5.7 yutaka)
+			 */
+			// ƒ_ƒCƒAƒƒO‚̃TƒCƒY
+			GetWindowRect(Dialog, &dlgrc);
+			dlgw = dlgrc.right - dlgrc.left;
+			dlgh = dlgrc.bottom - dlgrc.top;
+			// ƒrƒbƒgƒ}ƒbƒv‚̍쐬
+			dlgdc = CreateCompatibleDC(NULL);
+			ZeroMemory(&bmiHeader, sizeof(BITMAPINFOHEADER));
+			bmiHeader.biSize      = sizeof(BITMAPINFOHEADER);
+			bmiHeader.biWidth     = dlgw;
+			bmiHeader.biHeight    = -dlgh;
+			bmiHeader.biPlanes    = 1;
+			bmiHeader.biBitCount  = 32;
+			bmi.bmiHeader = bmiHeader;
+			dlgbmp = CreateDIBSection(NULL, (LPBITMAPINFO)&bmi, DIB_RGB_COLORS, &dlgpixel, NULL, 0);
+			dlgprevbmp = (HBITMAP)SelectObject(dlgdc, dlgbmp);
+			// ƒrƒbƒgƒ}ƒbƒv‚Ì”wŒiFi’©Ä‚¯‚Á‚Û‚¢j‚ðì‚éB
+			for (y = 0 ; y < dlgh ; y++) {
+				double dx = (double)(255 - 180) / dlgw;
+				double dy = (double)255/dlgh;
+				BYTE r, g, b;
+				for (x = 0 ; x < dlgw ; x++) {
+					r = min((int)(180+dx*x), 255);
+					g = min((int)(180+dx*x), 255);
+					b = max((int)(255-y*dx), 0);
+					// ‰æ‘f‚Ì•À‚т́A‰ºˆÊƒoƒCƒg‚©‚çB, G, R, A‚Æ‚È‚éB
+					dlgpixel[POS(x, y)] = b | g << 8 | r << 16;
+				}
+			}
+			// ƒGƒtƒFƒNƒgƒ^ƒCƒ}[‚ÌŠJŽn
+			//SetTimer(Dialog, ID_EFFECT_TIMER, 40, NULL);
+
 			return TRUE;
 
 		case WM_COMMAND:
 			switch (LOWORD(wParam)) {
+				int val;
 				case IDOK:
-					EndDialog(Dialog, 1);
-					return TRUE;
+					val = 1;
+				case IDCANCEL:
+					val = 0;
+					//KillTimer(Dialog, ID_EFFECT_TIMER);
 
-				case IDCANCEL:
-					EndDialog(Dialog, 0);
+					SelectObject(dlgdc, dlgprevbmp);
+					DeleteObject(dlgbmp);
+					DeleteDC(dlgdc);
+					dlgdc = NULL;
+					dlgprevbmp = dlgbmp = NULL;
+
+					EndDialog(Dialog, val);
 					return TRUE;
 			}
 			if (DlgAboutFont != NULL) {
 				DeleteObject(DlgAboutFont);
 			}
 			break;
+
+		// static text‚Ì”wŒi‚𓧉߂³‚¹‚éB
+		case WM_CTLCOLORSTATIC:
+			SetBkMode((HDC)wParam, TRANSPARENT);
+			return (BOOL)GetStockObject( NULL_BRUSH );
+			break;
+
+		case WM_PAINT:
+			if (dlgdc) {
+				hdc = BeginPaint(Dialog, &ps);
+				BitBlt(hdc, 
+					ps.rcPaint.left, ps.rcPaint.top, 
+					ps.rcPaint.right - ps.rcPaint.left, ps.rcPaint.bottom - ps.rcPaint.top,
+					dlgdc, 
+					ps.rcPaint.left, ps.rcPaint.top, 
+					SRCCOPY);
+
+				DrawIconEx(hdc, 15, 10, dlghicon, 0, 0, 0, 0, DI_NORMAL | DI_DEFAULTSIZE);
+
+				EndPaint(Dialog, &ps);
+			}
+			break;
+
+#if 0
+		case WM_MOUSEMOVE:
+			{
+				int xpos, ypos, x, y, nx, ny, max = 10;
+				DWORD val;
+				BYTE r, g, b;
+				RECT rc;
+
+				xpos = LOWORD(lParam); 
+				ypos = HIWORD(lParam);
+
+				for (y = -max ; y < max ; y++) {
+					for (x = -max ; x < max ; x++) {
+						nx = xpos + x;
+						ny = ypos + y;
+						if (nx >= 1 && nx <= dlgw-1 &&
+							ny >= 1 && ny <= dlgh-1) {
+
+							val = dlgpixel[POS(nx,ny)];
+							r = GetRValue(val);
+							g = GetGValue(val);
+							b = GetBValue(val);
+							val = (r + g + b) / 3;
+							dlgpixel[POS(nx,ny)] = b | g << 8 | r << 16;
+						}
+					}
+				}
+
+				rc.left = xpos - max;
+				rc.top = ypos - max;
+				rc.right = xpos + max;
+				rc.bottom = ypos + max;
+				InvalidateRect(Dialog, &rc, FALSE);
+			}
+			break;
+
+		case WM_TIMER:
+			if (wParam == ID_EFFECT_TIMER) 
+			{
+			}
+			break;
+#endif
+
 	}
 	return FALSE;
 }



Ttssh2-commit メーリングリストの案内
Back to archive index