Skip to content

Instantly share code, notes, and snippets.

@SimpleDrunk
Created February 26, 2014 02:19
Show Gist options
  • Save SimpleDrunk/9222214 to your computer and use it in GitHub Desktop.
Save SimpleDrunk/9222214 to your computer and use it in GitHub Desktop.
Merry Christmas Demo
#include "Windows.h"
#include <vfw.h>
#include "resource.h"
#pragma comment(lib,"vfw32.lib")
#define ID_TIMER_MOVE 1
int i, j;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR szCmdLine,
int iCmdShow)
{
WNDCLASS wndclass;
MSG msg;
HWND hwnd;
static TCHAR szName[] = TEXT("MerryChristmas");
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hbrBackground = CreateSolidBrush(RGB(10, 10, 10));
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WndProc;
wndclass.lpszClassName = szName;
wndclass.lpszMenuName = NULL;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL, TEXT("This program requires Windows NT!"),
szName, MB_ICONERROR);
return 0;
}
int cx = GetSystemMetrics(SM_CXSCREEN);
int cy = GetSystemMetrics(SM_CYSCREEN);
i = cx/2 - 100;
j = cy/2 - 100;
hwnd = CreateWindow(szName,
TEXT("Demo"),
WS_POPUPWINDOW,
i,
j,
200,
200,
NULL,
NULL,
hInstance,
NULL);
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd,GWL_EXSTYLE) ^ 0x80000);
SetBkMode(GetDC(hwnd), TRANSPARENT);
SetLayeredWindowAttributes(hwnd,RGB(10, 10, 10), (BYTE)255, LWA_ALPHA|LWA_COLORKEY);
ShowWindow(hwnd, TRUE);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HRGN hRgn;
static HBITMAP hBmp;
BITMAP bmp;
static HDC hdc, hdcMem;
static HRGN hRgnWnd;
static int cxBmp, cyBmp;
PAINTSTRUCT ps;
HWND hwndMci;
switch(message)
{
case WM_CREATE:
SetTimer(hwnd, ID_TIMER_MOVE, 20, NULL);
hBmp = LoadBitmap(((LPCREATESTRUCT)lParam)->hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
GetObject(hBmp, sizeof(BITMAP), &bmp);
cxBmp = bmp.bmWidth;
cyBmp = bmp.bmHeight;
hwndMci = MCIWndCreate(hwnd, ((LPCREATESTRUCT)lParam)->hInstance, MCIWNDF_SHOWNAME, TEXT("回梦游仙.mp3"));
ShowWindow(hwndMci, SW_HIDE);
MCIWndPlay(hwndMci);
return 0;
case WM_PAINT:
{
hRgn = CreateRectRgn(2, 2, 196, 196);
hdc = BeginPaint(hwnd, &ps);
hdcMem = CreateCompatibleDC(hdc);
SelectObject(hdcMem, hBmp);
BitBlt(hdc, 0, 30, cxBmp, cyBmp, hdcMem, 0, 0, SRCCOPY);
SetTextColor(hdc, RGB(255, 0, 0));
SetBkMode(hdc, TRANSPARENT);
TextOut(hdc, 5, 10, L"Merry Christmas!", 16);
SetWindowRgn(hwnd, hRgn, TRUE);
DeleteDC(hdcMem);
EndPaint(hwnd, &ps);
}
return 0;
case WM_TIMER:
{
int xScreen = GetSystemMetrics(SM_CXSCREEN);
RECT rcWnd;
GetWindowRect(hwnd, &rcWnd);
i -= 2;
if(i < rcWnd.left - rcWnd.right)
i = xScreen;
MoveWindow(hwnd, i, j, rcWnd.right - rcWnd.left, rcWnd.bottom - rcWnd.top, TRUE);
}
return 0;
case WM_DESTROY:
KillTimer(hwnd, ID_TIMER_MOVE);
MCIWndDestroy(hwndMci);
DeleteObject(hBmp);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment