First commit
This commit is contained in:
commit
947da90169
3 changed files with 192 additions and 0 deletions
BIN
Gwyn_L.bmp
Normal file
BIN
Gwyn_L.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.9 MiB |
BIN
Gwyn_R.bmp
Normal file
BIN
Gwyn_R.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.9 MiB |
192
main.c
Normal file
192
main.c
Normal file
|
|
@ -0,0 +1,192 @@
|
||||||
|
# include <windows.h>
|
||||||
|
|
||||||
|
|
||||||
|
HBITMAP gwynL, gwyn; //These are our .bmp files.
|
||||||
|
HBITMAP mgwynL, mgwyn; //These are masks we're gonna make because
|
||||||
|
HBITMAP draw, drawmask;//transparentcy is too scary for windows.
|
||||||
|
int frame = 0;
|
||||||
|
//BOOL startup = TRUE;
|
||||||
|
int frameWidth = 500;
|
||||||
|
int frames = 4;
|
||||||
|
int gwynpos = 0;
|
||||||
|
int dir = 1;
|
||||||
|
int gwyny;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
HBITMAP MakeMask(HBITMAP hbmColor, COLORREF ColorVanish)
|
||||||
|
{
|
||||||
|
HDC hdcmem, hdcmem2;
|
||||||
|
HBITMAP hbmMask;
|
||||||
|
BITMAP bmp;
|
||||||
|
// Make Monochrome Mask of bitmap
|
||||||
|
GetObject(hbmColor, sizeof(BITMAP), &bmp);
|
||||||
|
hbmMask = CreateBitmap(bmp.bmWidth, bmp.bmHeight, 1, 1, NULL);
|
||||||
|
// Ask windows to socialize with the driver and set me up with mem objs
|
||||||
|
hdcmem = CreateCompatibleDC(0);
|
||||||
|
hdcmem2 = CreateCompatibleDC(0);
|
||||||
|
SelectObject(hdcmem, hbmColor);
|
||||||
|
SelectObject(hdcmem2, hbmMask);
|
||||||
|
// Now we can do the things.
|
||||||
|
SetBkColor(hdcmem, ColorVanish);
|
||||||
|
|
||||||
|
BitBlt(hdcmem2, 0,0, bmp.bmWidth, bmp.bmHeight, hdcmem, 0,0, SRCCOPY);
|
||||||
|
BitBlt(hdcmem, 0,0, bmp.bmWidth, bmp.bmHeight, hdcmem2, 0,0, SRCINVERT);
|
||||||
|
|
||||||
|
// Throw out garbage
|
||||||
|
DeleteDC(hdcmem);
|
||||||
|
DeleteDC(hdcmem2);
|
||||||
|
return hbmMask;
|
||||||
|
}
|
||||||
|
// Let's make a Window's brain.
|
||||||
|
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM NoOneCares, LPARAM NoOneCares2)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_PAINT:
|
||||||
|
{
|
||||||
|
if (dir == 0)
|
||||||
|
{
|
||||||
|
draw = gwynL;
|
||||||
|
drawmask= mgwynL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
draw = gwyn;
|
||||||
|
drawmask= mgwyn;
|
||||||
|
}
|
||||||
|
PAINTSTRUCT ps;
|
||||||
|
HDC hdc = BeginPaint(hwnd, &ps);
|
||||||
|
HDC hdcmem = CreateCompatibleDC(hdc);
|
||||||
|
SelectObject(hdcmem, drawmask);
|
||||||
|
BitBlt(hdc, 0,0, frameWidth, 500, hdcmem, frame*frameWidth, 0, SRCAND);
|
||||||
|
SelectObject(hdcmem, draw);
|
||||||
|
BitBlt(hdc, 0,0, frameWidth, 500, hdcmem, frame*frameWidth, 0, SRCCOPY);
|
||||||
|
//Clean it!
|
||||||
|
DeleteDC(hdcmem);
|
||||||
|
EndPaint(hwnd, &ps);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WM_TIMER:
|
||||||
|
{
|
||||||
|
// We need to know our direction.
|
||||||
|
int scrn_x = GetSystemMetrics(SM_CXSCREEN);
|
||||||
|
if (dir > 0)
|
||||||
|
{
|
||||||
|
if (scrn_x-500 > gwynpos){
|
||||||
|
gwynpos = (gwynpos + 15);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
//startup = TRUE;
|
||||||
|
dir = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (gwynpos > -50)
|
||||||
|
{
|
||||||
|
gwynpos = gwynpos - 15;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//startup = TRUE;
|
||||||
|
dir = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
frame = (frame+1) % frames;
|
||||||
|
//if (startup){
|
||||||
|
// if (frame > 2){
|
||||||
|
// startup = FALSE;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//else
|
||||||
|
//{
|
||||||
|
// frame = frame; //Control Start up frames here.
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
SetWindowPos(hwnd, NULL, gwynpos, gwyny, 0, 0, SWP_NOSIZE |SWP_NOZORDER);
|
||||||
|
|
||||||
|
InvalidateRect(hwnd, NULL, FALSE);
|
||||||
|
UpdateWindow(hwnd);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WM_CREATE:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WM_CLOSE:
|
||||||
|
{
|
||||||
|
DestroyWindow(hwnd);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WM_DESTROY:
|
||||||
|
{
|
||||||
|
PostQuitMessage(0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
return DefWindowProc(hwnd, msg, NoOneCares, NoOneCares2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE freeNull, LPSTR argv, int ncmdshow)
|
||||||
|
{
|
||||||
|
WNDCLASSEX wc ={0};
|
||||||
|
const char WIN_CLASS[] = "Foxxer";
|
||||||
|
// Set the props.
|
||||||
|
wc.hInstance = GetModuleHandle(NULL);
|
||||||
|
wc.lpszClassName = WIN_CLASS;
|
||||||
|
wc.cbSize = sizeof(WNDCLASSEX);
|
||||||
|
wc.style = 0;
|
||||||
|
wc.lpfnWndProc = WndProc;
|
||||||
|
wc.cbClsExtra = 0;
|
||||||
|
wc.cbWndExtra = 0;
|
||||||
|
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
|
||||||
|
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||||
|
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
|
||||||
|
wc.lpszMenuName = NULL;
|
||||||
|
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
|
||||||
|
|
||||||
|
// Let's put ourselves at the bottom left, so Gwyn's feet touch.
|
||||||
|
int screen_y = GetSystemMetrics(SM_CYSCREEN);
|
||||||
|
gwyny = screen_y -525;
|
||||||
|
// Give Windows our new window, then ask for it back
|
||||||
|
RegisterClassEx(&wc);
|
||||||
|
HWND hwnd = CreateWindowEx(
|
||||||
|
WS_EX_LAYERED,
|
||||||
|
WIN_CLASS,
|
||||||
|
NULL,
|
||||||
|
WS_POPUP,
|
||||||
|
0, gwyny,
|
||||||
|
500, 500,
|
||||||
|
NULL, NULL, GetModuleHandle(NULL), NULL
|
||||||
|
);
|
||||||
|
// Let's load our bmp This will need to be moved somewhere else.
|
||||||
|
gwyn = (HBITMAP)LoadImage(NULL, "Gwyn_R.bmp", IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);
|
||||||
|
gwynL = (HBITMAP)LoadImage(NULL, "Gwyn_L.bmp", IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);
|
||||||
|
mgwyn = MakeMask(gwyn, RGB(255,255,255));
|
||||||
|
mgwynL= MakeMask(gwynL, RGB(255,255,255));
|
||||||
|
// Final Window tweaks
|
||||||
|
SetLayeredWindowAttributes(hwnd, RGB(0,0,0), 0, LWA_COLORKEY);
|
||||||
|
//Start timer, need to tweak
|
||||||
|
SetTimer(hwnd, 1, 150, NULL);
|
||||||
|
|
||||||
|
//Launch!
|
||||||
|
ShowWindow(hwnd, SW_SHOWNORMAL);
|
||||||
|
UpdateWindow(hwnd);
|
||||||
|
|
||||||
|
MSG msg = {0};
|
||||||
|
while (GetMessage(&msg, NULL, 0,0) > 0)
|
||||||
|
{
|
||||||
|
TranslateMessage(&msg);
|
||||||
|
DispatchMessage(&msg);
|
||||||
|
}
|
||||||
|
// Clean up!
|
||||||
|
KillTimer(hwnd, 1);
|
||||||
|
DeleteObject(gwyn); // So sad :(
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue