recently my programs are encountering GPFs
i dont know how to solve it
here is one that is GPF ing
#include <windows.h>
#include <stdio.h>
#define intx2(x) (int)((int)x * 2)
#define doub(v) ((intx2((v)) > 255) ? ((wchar_t)intx2((v))): 255)
#define TOGRAY(R, G, B) ((wchar_t)((R+G+B) / 3))
#define NORMALIZE(X) (((X) > 255) ? 255: (((X) < 0) ? 0: (X)))
#define hdc H
#define bool char
float xc=1.0,yc=1.0;
DWORD bw=160,bh=100;
int width=160,height=99;
char filename[25];
HWND TEXT;
bool testfile(char *name){
FILE *x =fopen(name, "r");
if(fgetc(x)!='B'){fclose(x); return (FALSE);}
if(x == NULL){return FALSE;}
fclose(x);
return (TRUE);
}
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
char szClassName[ ] = "mini bitmap viewer";
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{
HWND hwnd;
MSG messages;
WNDCLASS wincl;
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
if (!RegisterClass (&wincl))
return 0;
hwnd = CreateWindowEx (
0,
szClassName,
"Windows App",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
170,
140,
HWND_DESKTOP,
NULL,
hThisInstance,
NULL
);
ShowWindow (hwnd, nFunsterStil);
while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return messages.wParam;
}
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
TEXT=
CreateWindow("edit", NULL,
WS_CHILD |WS_VISIBLE |WS_BORDER,
0, 0, 150, 20,
hwnd, (NULL)/*ID_EDIT*/,
((LPCREATESTRUCT)lParam)->hInstance, NULL);
break;
case WM_SETFOCUS:
SetFocus(TEXT);
break;
case WM_COMMAND:
if(/*HIWORD(wParam) == EN_UPDATE*/1)
{
GetWindowText(TEXT, filename, 32);
if(!testfile(filename) && filename[0] != '\0'){break;}
FILE *BITMAP=
fopen(testfile(filename)? filename: "D:\\_3_1.bmp", "rb");
fseek(BITMAP, 0x12, 0);
fread(&bw, 4, 1, BITMAP);
fread(&bh, 4, 1, BITMAP);
fclose(BITMAP);
*(float *)&xc = (float)((float)width/(float)bw);
*(float *)&yc = (float)((float)(height-20)/(float)bh);
InvalidateRect(hwnd, NULL, TRUE);
}
break;
case WM_SIZE:
{
RECT x = {0, 0, LOWORD(lParam), HIWORD(lParam)};
width = LOWORD(lParam);
height = HIWORD(lParam);
*(float *)&xc = (float)((float)LOWORD(lParam)/(float)bw);
*(float *)&yc = (float)((float)(HIWORD(lParam)-20)/(float)bh);
InvalidateRect(hwnd, &x, 1);
break;
}
case WM_PAINT:{
PAINTSTRUCT p;
HBRUSH brush;
HDC H=
BeginPaint(hwnd, &p);
FILE *BITMAP=
fopen(testfile(filename) ? filename: "D:\\_3_1.bmp", "rb");
fseek(BITMAP, 0x12, 0);
fread(&bw, 4, 1, BITMAP);
fread(&bh, 4, 1, BITMAP);
fseek(BITMAP, 54, 0);
wchar_t R,G,B,GRAY;
char dump[6];
// int NR,NG,NB;
int x,y;
for(y = 0;y < bh;y++){
for(x = 0;x < bw;x++){
fread(&B, 1, 1, BITMAP);
fread(&G, 1, 1, BITMAP);
fread(&R, 1, 1, BITMAP);
GRAY = TOGRAY(R,G,B);
if(bw%2==0 ||y%2==0){
brush = CreateSolidBrush(PALETTERGB(R,G,(B/16)*16));
}else
brush = CreateSolidBrush(PALETTERGB(GRAY,GRAY,GRAY));
RECT R = {x*xc, ((bh-y)*yc)+20, (x+1)*xc, (((bh-y)+1)*yc)+20};
FillRect(hdc, &R, brush);
DeleteObject(brush);
}
if((bw % 4 )!= 0){
fread(&dump, bw % 4, 1, BITMAP);
}
}
fclose(BITMAP);
/*RECT r = {0, 0, 160, 100};
InvalidateRect(hwnd, &r, 0);*/
EndPaint(hwnd, &p);
break;
}
case WM_DESTROY:
PostQuitMessage (0); /* send a WM_QUIT to the message queue */
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}