Fix some bugs in Paint.

svn path=/trunk/; revision=41141
This commit is contained in:
Dmitry Gorbachev 2009-05-27 12:03:18 +00:00
parent 1692e98b17
commit acf1233799
9 changed files with 59 additions and 44 deletions

View file

@ -59,6 +59,7 @@ LRESULT CALLBACK MRDlgWinProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lP
default: default:
return FALSE; return FALSE;
} }
return TRUE;
} }
int mirrorRotateDlg() int mirrorRotateDlg()
@ -93,6 +94,7 @@ LRESULT CALLBACK ATTDlgWinProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM l
default: default:
return FALSE; return FALSE;
} }
return TRUE;
} }
int attributesDlg() int attributesDlg()
@ -125,6 +127,7 @@ LRESULT CALLBACK CHSIZEDlgWinProc (HWND hwnd, UINT message, WPARAM wParam, LPARA
default: default:
return FALSE; return FALSE;
} }
return TRUE;
} }
int changeSizeDlg() int changeSizeDlg()

View file

@ -43,7 +43,7 @@ int GetDIBHeight(HBITMAP hbm)
return bm.bmHeight; return bm.bmHeight;
} }
void SaveDIBToFile(HBITMAP hbm, char name[], HDC hdc) void SaveDIBToFile(HBITMAP hbm, LPSTR name, HDC hdc)
{ {
BITMAP bm; BITMAP bm;
GetObject(hbm, sizeof(BITMAP), &bm); GetObject(hbm, sizeof(BITMAP), &bm);
@ -77,7 +77,7 @@ void SaveDIBToFile(HBITMAP hbm, char name[], HDC hdc)
HeapFree(GetProcessHeap(), 0, buffer); HeapFree(GetProcessHeap(), 0, buffer);
} }
HBITMAP LoadDIBFromFile(char name[]) HBITMAP LoadDIBFromFile(LPSTR name)
{ {
HBITMAP bm; HBITMAP bm;
BITMAPFILEHEADER bfh; BITMAPFILEHEADER bfh;
@ -88,7 +88,7 @@ HBITMAP LoadDIBFromFile(char name[])
ReadFile(f, &bfh, 14, (LPDWORD)&bytesRead, NULL); ReadFile(f, &bfh, 14, (LPDWORD)&bytesRead, NULL);
if (bfh.bfType!=0x4d42) if (bfh.bfType!=0x4d42)
{ {
fclose(f); CloseHandle(f);
return NULL; return NULL;
} }
bi = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, bfh.bfOffBits-14); bi = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, bfh.bfOffBits-14);

View file

@ -12,6 +12,6 @@ int GetDIBWidth(HBITMAP hbm);
int GetDIBHeight(HBITMAP hbm); int GetDIBHeight(HBITMAP hbm);
void SaveDIBToFile(HBITMAP hbm, char name[], HDC hdc); void SaveDIBToFile(HBITMAP hbm, LPSTR name, HDC hdc);
HBITMAP LoadDIBFromFile(char name[]); HBITMAP LoadDIBFromFile(LPSTR name);

View file

@ -15,6 +15,8 @@
/* FUNCTIONS ********************************************************/ /* FUNCTIONS ********************************************************/
extern void updateCanvasAndScrollbars(void);
void setImgXYRes(int x, int y) void setImgXYRes(int x, int y)
{ {
if ((imgXRes!=x)||(imgYRes!=y)) if ((imgXRes!=x)||(imgYRes!=y))

View file

@ -194,11 +194,11 @@ int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpsz
wclSelection.hbrBackground = NULL;//GetSysColorBrush(COLOR_BTNFACE); wclSelection.hbrBackground = NULL;//GetSysColorBrush(COLOR_BTNFACE);
RegisterClassEx (&wclSelection); RegisterClassEx (&wclSelection);
LoadString(hThisInstance, IDS_DEFAULTFILENAME, (LPTSTR)&filename, 256); LoadString(hThisInstance, IDS_DEFAULTFILENAME, (LPTSTR)filename, sizeof(filename));
char progtitle[1000]; char progtitle[1000];
char resstr[100]; char resstr[100];
LoadString(hThisInstance, IDS_WINDOWTITLE, (LPTSTR)&resstr, 100); LoadString(hThisInstance, IDS_WINDOWTITLE, (LPTSTR)resstr, sizeof(resstr));
sprintf(progtitle, resstr, &filename); sprintf(progtitle, resstr, filename);
// create main window // create main window
@ -240,9 +240,9 @@ int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpsz
for (i=0; i<16; i++) for (i=0; i<16; i++)
{ {
int wrapnow = 0; int wrapnow = 0;
if (i%2==1) wrapnow = TBSTATE_WRAP; if (i % 2 == 1) wrapnow = TBSTATE_WRAP;
LoadString(hThisInstance, IDS_TOOLTIP1+i, (LPTSTR)&tooltips[i], 30); LoadString(hThisInstance, IDS_TOOLTIP1 + i, (LPTSTR)tooltips[i], 30);
TBBUTTON tbbutton = {i, (HMENU)(ID_FREESEL+i), TBSTATE_ENABLED | wrapnow, TBSTYLE_CHECKGROUP, {0}, 0, &tooltips[i]}; TBBUTTON tbbutton = { i, ID_FREESEL + i, TBSTATE_ENABLED | wrapnow, TBSTYLE_CHECKGROUP, {0}, 0, (INT_PTR)tooltips[i] };
SendMessage(hToolbar, TB_ADDBUTTONS, 1, (LPARAM)&tbbutton); SendMessage(hToolbar, TB_ADDBUTTONS, 1, (LPARAM)&tbbutton);
} }
// SendMessage(hToolbar, TB_SETROWS, MAKEWPARAM(8, FALSE), (LPARAM)NULL); // SendMessage(hToolbar, TB_SETROWS, MAKEWPARAM(8, FALSE), (LPARAM)NULL);
@ -299,41 +299,41 @@ int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpsz
choosecolor.lpfnHook = NULL; choosecolor.lpfnHook = NULL;
choosecolor.lpTemplateName = NULL; choosecolor.lpTemplateName = NULL;
int c; char *c;
// initializing the OPENFILENAME structure for use with GetOpenFileName and GetSaveFileName // initializing the OPENFILENAME structure for use with GetOpenFileName and GetSaveFileName
char ofnFilename[1000]; char ofnFilename[1000];
CopyMemory(&ofnFilename, &filename, 256); CopyMemory(ofnFilename, filename, sizeof(filename));
char ofnFiletitle[256]; char ofnFiletitle[256];
char ofnFilter[1000]; char ofnFilter[1000];
LoadString(hThisInstance, IDS_OPENFILTER, (LPTSTR)&ofnFilter, 1000); LoadString(hThisInstance, IDS_OPENFILTER, (LPTSTR)ofnFilter, sizeof(ofnFilter));
for (c=0; c<1000; c++) if (ofnFilter[c]==(char)1) ofnFilter[c] = (char)0; for (c = ofnFilter; *c; c++) if (*c == '\1') *c = '\0';
ZeroMemory(&ofn, sizeof(OPENFILENAME)); ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof (OPENFILENAME); ofn.lStructSize = sizeof (OPENFILENAME);
ofn.hwndOwner = hwnd; ofn.hwndOwner = hwnd;
ofn.hInstance = hThisInstance; ofn.hInstance = hThisInstance;
ofn.lpstrFilter = (LPCTSTR)&ofnFilter; ofn.lpstrFilter = (LPCTSTR)ofnFilter;
ofn.lpstrFile = (LPTSTR)&ofnFilename; ofn.lpstrFile = (LPTSTR)ofnFilename;
ofn.nMaxFile = 1000; ofn.nMaxFile = sizeof(ofnFilename);
ofn.lpstrFileTitle = (LPTSTR)&ofnFiletitle; ofn.lpstrFileTitle = (LPTSTR)ofnFiletitle;
ofn.nMaxFileTitle = 256; ofn.nMaxFileTitle = sizeof(ofnFiletitle);
ofn.Flags = OFN_HIDEREADONLY; ofn.Flags = OFN_HIDEREADONLY;
char sfnFilename[1000]; char sfnFilename[1000];
CopyMemory(&sfnFilename, &filename, 256); CopyMemory(sfnFilename, filename, sizeof(filename));
char sfnFiletitle[256]; char sfnFiletitle[256];
char sfnFilter[1000]; char sfnFilter[1000];
LoadString(hThisInstance, IDS_SAVEFILTER, (LPTSTR)&sfnFilter, 1000); LoadString(hThisInstance, IDS_SAVEFILTER, (LPTSTR)sfnFilter, sizeof(sfnFilter));
for (c=0; c<1000; c++) if (sfnFilter[c]==(char)1) sfnFilter[c] = (char)0; for (c = sfnFilter; *c; c++) if (*c == '\1') *c = '\0';
ZeroMemory(&sfn, sizeof(OPENFILENAME)); ZeroMemory(&sfn, sizeof(OPENFILENAME));
sfn.lStructSize = sizeof (OPENFILENAME); sfn.lStructSize = sizeof (OPENFILENAME);
sfn.hwndOwner = hwnd; sfn.hwndOwner = hwnd;
sfn.hInstance = hThisInstance; sfn.hInstance = hThisInstance;
sfn.lpstrFilter = (LPCTSTR)&sfnFilter; sfn.lpstrFilter = (LPCTSTR)sfnFilter;
sfn.lpstrFile = (LPTSTR)&sfnFilename; sfn.lpstrFile = (LPTSTR)sfnFilename;
sfn.nMaxFile = 1000; sfn.nMaxFile = sizeof(sfnFilename);
sfn.lpstrFileTitle = (LPTSTR)&sfnFiletitle; sfn.lpstrFileTitle = (LPTSTR)sfnFiletitle;
sfn.nMaxFileTitle = 256; sfn.nMaxFileTitle = sizeof(sfnFiletitle);
sfn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY; sfn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY;

View file

@ -9,6 +9,9 @@
/* INCLUDES *********************************************************/ /* INCLUDES *********************************************************/
#include "globalvar.h" #include "globalvar.h"
#include "dib.h"
#include "drawing.h"
#include "history.h"
/* FUNCTIONS ********************************************************/ /* FUNCTIONS ********************************************************/

View file

@ -10,6 +10,9 @@
#include <windows.h> #include <windows.h>
#include "globalvar.h" #include "globalvar.h"
#include "drawing.h"
#include "history.h"
#include "mouse.h"
/* FUNCTIONS ********************************************************/ /* FUNCTIONS ********************************************************/

View file

@ -10,6 +10,7 @@
#include <windows.h> #include <windows.h>
#include "globalvar.h" #include "globalvar.h"
#include "drawing.h"
/* FUNCTIONS ********************************************************/ /* FUNCTIONS ********************************************************/

View file

@ -16,7 +16,10 @@
#include "definitions.h" #include "definitions.h"
#include "globalvar.h" #include "globalvar.h"
#include "dialogs.h" #include "dialogs.h"
#include "dib.h"
#include "drawing.h"
#include "history.h" #include "history.h"
#include "mouse.h"
/* FUNCTIONS ********************************************************/ /* FUNCTIONS ********************************************************/
@ -59,11 +62,11 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
{ {
char programname[20]; char programname[20];
char saveprompttext[100]; char saveprompttext[100];
LoadString(hProgInstance, IDS_PROGRAMNAME, (LPTSTR)&programname, 20); LoadString(hProgInstance, IDS_PROGRAMNAME, (LPTSTR)programname, sizeof(programname));
LoadString(hProgInstance, IDS_SAVEPROMPTTEXT, (LPTSTR)&saveprompttext, 100); LoadString(hProgInstance, IDS_SAVEPROMPTTEXT, (LPTSTR)saveprompttext, sizeof(saveprompttext));
char temptext[500]; char temptext[500];
sprintf(temptext, saveprompttext, filename); sprintf(temptext, saveprompttext, filename);
switch (MessageBox(hwnd, (LPTSTR)&temptext, (LPTSTR)&programname, MB_YESNOCANCEL | MB_ICONQUESTION)) switch (MessageBox(hwnd, (LPTSTR)temptext, (LPTSTR)programname, MB_YESNOCANCEL | MB_ICONQUESTION))
{ {
case IDNO: case IDNO:
DestroyWindow(hwnd); DestroyWindow(hwnd);
@ -361,9 +364,9 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
HICON paintIcon = LoadIcon(hProgInstance, MAKEINTRESOURCE(IDI_APPICON)); HICON paintIcon = LoadIcon(hProgInstance, MAKEINTRESOURCE(IDI_APPICON));
char infotitle[100]; char infotitle[100];
char infotext[200]; char infotext[200];
LoadString(hProgInstance, IDS_INFOTITLE, (LPTSTR)&infotitle, 100); LoadString(hProgInstance, IDS_INFOTITLE, (LPTSTR)infotitle, sizeof(infotitle));
LoadString(hProgInstance, IDS_INFOTEXT, (LPTSTR)&infotext, 200); LoadString(hProgInstance, IDS_INFOTEXT, (LPTSTR)infotext, sizeof(infotext));
ShellAbout(hMainWnd, (LPTSTR)&infotitle, (LPTSTR)&infotext, paintIcon); ShellAbout(hMainWnd, (LPTSTR)infotitle, (LPTSTR)infotext, paintIcon);
DeleteObject(paintIcon); DeleteObject(paintIcon);
} }
break; break;
@ -387,10 +390,10 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
updateCanvasAndScrollbars(); updateCanvasAndScrollbars();
char tempstr[1000]; char tempstr[1000];
char resstr[100]; char resstr[100];
CopyMemory(&filename, ofn.lpstrFileTitle, 256); CopyMemory(filename, ofn.lpstrFileTitle, sizeof(filename));
CopyMemory(&filepathname, ofn.lpstrFileTitle, 1000); CopyMemory(filepathname, ofn.lpstrFileTitle, sizeof(filepathname));
LoadString(hProgInstance, IDS_WINDOWTITLE, (LPTSTR)&resstr, 100); LoadString(hProgInstance, IDS_WINDOWTITLE, (LPTSTR)resstr, sizeof(resstr));
sprintf(tempstr, resstr, &filename); sprintf(tempstr, resstr, filename);
SetWindowText(hMainWnd, tempstr); SetWindowText(hMainWnd, tempstr);
clearHistory(); clearHistory();
isAFile = TRUE; isAFile = TRUE;
@ -399,7 +402,7 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
break; break;
case IDM_FILESAVE: case IDM_FILESAVE:
if (isAFile) if (isAFile)
SaveDIBToFile(hBms[currInd], &filepathname, hDrawingDC); SaveDIBToFile(hBms[currInd], filepathname, hDrawingDC);
else else
SendMessage(hwnd, WM_COMMAND, IDM_FILESAVEAS, 0); SendMessage(hwnd, WM_COMMAND, IDM_FILESAVEAS, 0);
break; break;
@ -409,10 +412,10 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
SaveDIBToFile(hBms[currInd], sfn.lpstrFile, hDrawingDC); SaveDIBToFile(hBms[currInd], sfn.lpstrFile, hDrawingDC);
char tempstr[1000]; char tempstr[1000];
char resstr[100]; char resstr[100];
CopyMemory(&filename, sfn.lpstrFileTitle, 256); CopyMemory(filename, sfn.lpstrFileTitle, sizeof(filename));
CopyMemory(&filepathname, sfn.lpstrFileTitle, 1000); CopyMemory(filepathname, sfn.lpstrFileTitle, sizeof(filepathname));
LoadString(hProgInstance, IDS_WINDOWTITLE, (LPTSTR)&resstr, 100); LoadString(hProgInstance, IDS_WINDOWTITLE, (LPTSTR)resstr, sizeof(resstr));
sprintf(tempstr, resstr, &filename); sprintf(tempstr, resstr, filename);
SetWindowText(hMainWnd, tempstr); SetWindowText(hMainWnd, tempstr);
isAFile = TRUE; isAFile = TRUE;
} }
@ -503,7 +506,7 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
break; break;
case IDM_IMAGEATTRIBUTES: case IDM_IMAGEATTRIBUTES:
{ {
int attrdata[8] = {0, 0, 0, 0, 0, 0, 0, 0}; //int attrdata[8] = {0, 0, 0, 0, 0, 0, 0, 0};
attributesDlg(); attributesDlg();
//cropReversible(640, 200); //cropReversible(640, 200);
//ZoomTo(zoom); //ZoomTo(zoom);