示例#1
0
void run_window(Fl_Double_Window *o, Fl_Widget *w, int min_w, int min_h)
{
  if (w) {
    set_size(o, w);
  }
  set_size_range(o, min_w, min_h);
  set_position(o);
  o->end();
  set_taskbar(o);
  o->show();
  set_undecorated(o);
  set_always_on_top(o);
  Fl::run();
}
示例#2
0
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC hdc, hmem;
	static HDC offscreen;
	PAINTSTRUCT ps;
	RECT rect, rect2;
	BITMAP bm;
	POINT point;
	static POINT start;
	static int dragging = 0;
	HDC desktop;
	HBITMAP hbitmap;
	HANDLE hdrop;
	HFONT dfltFont;
	int dfltBGMode;
	double percomp;

	switch (message)
	{
		case WM_CREATE:
			menu = LoadMenu(hinst, MAKEINTRESOURCE(IDR_MENU1));
			menu = GetSubMenu(menu, 0);

			offscreen = CreateCompatibleDC(NULL);
			desktop = GetDC(GetDesktopWindow());
			hbitmap = CreateCompatibleBitmap(desktop, 200, 200);
			ReleaseDC(GetDesktopWindow(), desktop);
			SelectObject(offscreen, hbitmap);

			// Start the engines
			decthread_init();

			// We accept drag&drop
			DragAcceptFiles(hwnd, TRUE);
			return 0;

		case WM_PAINT:
			hdc = BeginPaint(hwnd, &ps);
			GetClientRect(hwnd, &rect);
			width = rect.right + 1;
			height = rect.bottom + 1;

			FillRect(offscreen, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH));
			DrawText(offscreen, "Drop Files Here", -1, &rect, DT_SINGLELINE | DT_CENTER);
			SetRect(&rect2, 0, height - 110, width, height - 25);
			DrawText(offscreen, "For Decoding", -1, &rect2, DT_SINGLELINE | DT_CENTER);

			hmem = CreateCompatibleDC(offscreen);
			SelectObject(hmem, hbm[frame]);
			GetObject(hbm[frame], sizeof(BITMAP), &bm);
			BitBlt(offscreen, width / 2 - 33, height / 2 - 31, bm.bmWidth, bm.bmHeight, hmem, 0, 0, SRCCOPY);
			DeleteDC(hmem);

			percomp = ((double)(totalfiles - numfiles) + 1 - (1 - file_complete)) / (double)totalfiles;

			SetRect(&vbrBR, 0, height - 35, width, height - 19);

			dfltBGMode = SetBkMode(offscreen, TRANSPARENT);
			dfltFont = SelectObject(offscreen, font2);

			SetRect(&bar1, 0, height - 23, (int)(file_complete * width), height - 13);
			SetRect(&bar2, 0, height - 12, (int)(percomp * width), height - 2);

			FillRect(offscreen, &bar1, (HBRUSH)GetStockObject(LTGRAY_BRUSH));
			FillRect(offscreen, &bar2, (HBRUSH)GetStockObject(DKGRAY_BRUSH));

			if (fileName)
			{
				char* sep;
				char  fileCaption[80];

				if ((sep = strrchr(fileName, '\\')) != 0)
					fileName = sep+1;

				(void) strcpy(fileCaption, "   ");
				(void) strcat(fileCaption, fileName);

				DrawText(offscreen, fileCaption, -1, &bar1, DT_SINGLELINE | DT_LEFT);
			}

			SelectObject(offscreen, dfltFont);
			SetBkMode(offscreen, dfltBGMode);

			BitBlt(hdc, 0, 0, width, height, offscreen, 0, 0, SRCCOPY);

			EndPaint(hwnd, &ps);

			return DefWindowProc(hwnd, message, wParam, lParam);
			//return 0;

		case WM_TIMER:
			if (animate || frame)
			{
				frame++;
				if (frame > 7) 
					frame -= 8;
			}
			else
			{
				frame = 0;
			}
			GetClientRect(hwnd, &rect);
			InvalidateRect(hwnd, &rect, FALSE);
			return 0;

		case WM_LBUTTONDOWN:
			start.x = LOWORD(lParam);
			start.y = HIWORD(lParam);
			ClientToScreen(hwnd, &start);
			GetWindowRect(hwnd, &rect);
			start.x -= rect.left;
			start.y -= rect.top;
			dragging = 1;
			SetCapture(hwnd);
			return 0;

		case WM_LBUTTONUP:
			if (dragging)
			{
				dragging = 0;
				ReleaseCapture();
			}
			return 0;

		case WM_MOUSEMOVE:
			if (dragging)
			{
				point.x = LOSHORT(lParam);
				point.y = HISHORT(lParam);

				/* lParam can contain negative coordinates !
				 * point.x = LOWORD(lParam);
				 * point.y = HIWORD(lParam);
				 */

				ClientToScreen(hwnd, &point);
				SetWindowPos(hwnd, 0, point.x - start.x, point.y - start.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW);
				iniSettings.window_x = point.x - start.x;
				iniSettings.window_y = point.y - start.y;
			}
			return 0;

		case WM_CAPTURECHANGED:
			if (dragging)
			{
				dragging = 0;
				ReleaseCapture();
			}
			return 0;

		case WM_RBUTTONUP:
			point.x = LOWORD(lParam);
			point.y = HIWORD(lParam);
			ClientToScreen(hwnd, &point);
			TrackPopupMenu(menu, TPM_RIGHTBUTTON, point.x, point.y, 0, hwnd, NULL);
			return 0;

		case WM_COMMAND:
			switch (LOWORD(wParam)) 
			{
				case IDM_QUIT:
					WriteIniFile(INI_FILE);
					decoding_done = 1;
					PostQuitMessage(0);
					break;
				case IDM_ONTOP:
					set_always_on_top(hwnd, ~GetMenuState(menu, LOWORD(wParam), MF_BYCOMMAND) & MF_CHECKED);
					break;	
				case IDM_LOGERR:
					set_logerr(hwnd, ~GetMenuState(menu, LOWORD(wParam), MF_BYCOMMAND) & MF_CHECKED);
					break;
				case IDM_STOP_DEC:
				{
					int v = ~GetMenuState(menu, LOWORD(wParam), MF_BYCOMMAND) & MF_CHECKED;
					if(v == 8)
						stop_decoding = 1;
					break;
				}
				case IDM_VOLUME:
				{
					int value = 
					DialogBox(
					hinst,  
					MAKEINTRESOURCE(IDD_VOLUME),   
					hwnd, QCProc);

					if (value == -2)
						break;
					break;
				}
				case IDM_ABOUT:
				{
					int value = DialogBox(hinst, MAKEINTRESOURCE(IDD_ABOUT), hwnd, QCProc);
					if (value == -7)
						break;
					break;
				}

			} // LOWORD(wParam)
			return 0;

		case WM_DROPFILES:
			hdrop = (HANDLE)wParam;
			HandleDrag(hwnd, hdrop);
			return 0;
	
		case WM_DESTROY:
			decoding_done = 1;
			PostQuitMessage(0);
			return 0;
	}

	return DefWindowProc(hwnd, message, wParam, lParam);
}
示例#3
0
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
	static char szAppName[] = "aacDECdrop";
	HWND hwnd;
	MSG msg;
	WNDCLASS wndclass;
	const int width = 130;
	const int height = 130;
	int x;
	int y;

	hinst = hInstance;

	wndclass.style = CS_HREDRAW | CS_VREDRAW;
	wndclass.lpfnWndProc = WndProc;
	wndclass.cbClsExtra = 0;
	wndclass.cbWndExtra = 0;
	wndclass.hInstance = hInstance;
	wndclass.hIcon = LoadIcon(hinst, MAKEINTRESOURCE(IDI_ICON1));
	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
	wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wndclass.lpszMenuName = NULL;
	wndclass.lpszClassName = szAppName;

	RegisterClass(&wndclass);

	GetAACdecSettings();

	x = max(min(iniSettings.window_x, GetSystemMetrics(SM_CXSCREEN) - width), 0);
	y = max(min(iniSettings.window_y, GetSystemMetrics(SM_CYSCREEN) - height), 0);

	hwnd = CreateWindow(szAppName, "aacDECdrop", WS_POPUP | WS_DLGFRAME, x, y,
	width, height, NULL, NULL, hInstance, NULL);

	g_hwnd = hwnd;

	ShowWindow(hwnd, iCmdShow);
	UpdateWindow(hwnd);

	font2 = CREATEFONT(10);

	SetTimer(hwnd, 1, 80, NULL);

	set_always_on_top(hwnd, iniSettings.always_on_top);
	set_logerr(hwnd, iniSettings.logerr);
	set_decode_mode(iniSettings.decode_mode);
	set_outputFormat(iniSettings.outputFormat);
	set_fileType(iniSettings.fileType);
	set_object_type(iniSettings.object_type);
	
	for (frame = 0; frame < 8; frame++)
		hbm[frame] = LoadImage(hinst, MAKEINTRESOURCE(IDB_TF01 + frame), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
	frame = 0;

	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	for (frame = 0; frame < 8; frame++) 
		DeleteObject(hbm[frame]);

	return msg.wParam;
}
示例#4
0
 void always_on_top() { set_always_on_top(window_); }