First commit

This commit is contained in:
Gwyn 2026-01-12 23:59:02 -05:00
commit 947da90169
3 changed files with 192 additions and 0 deletions

BIN
Gwyn_L.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

BIN
Gwyn_R.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

192
main.c Normal file
View 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;
}