看一下我配置完的运行结果:

1)首先创建一个项目。

2)选择win项目和C语言

3)然后找到你保存项目的文件夹里面拷贝两个.c和.h文件,两个文件代码我附在最后。

4)现在还不能用,找到项目属性

5)打开参数,点开连接,你可以看到我已经粘贴进去了

如果你是64位和我一样的话那就粘贴下面的两个其中一个(因为我的电脑这些文件位置不一样)

A种)

C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libwinmm.a                                    C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libmsimg32.a                  C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libkernel32.a                C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libuser32.a                    C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libgdi32.a                      C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libole32.a                      C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/liboleaut32.a                  C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libuuid.a

B种)

"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libwinmm.a"
"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib32/libgdi32.a"
"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib32/libkernel32.a"
"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib32/libmsimg32.a"
"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib32/libole32.a"
"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib32/liboleaut32.a"
"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib32/libuser32.a"
"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib32/libuuid.a"

6)你现在可以把你在主函数里面自动生成的代码全部删掉,注意是主函数哈,不是那两个要你复制过去的文件。删掉后你就可以做你自己事情,写你的图形了

我的main函数代码:

#include "acllib.h"
#include<stdio.h>
int Setup()
{
initConsole();
printf("输入宽度:");
int width;
scanf("%d", &width);
initWindow( "text",100,100, 600, 500);
beginPaint();
line(20, 20, width-20, width-20);
endPaint();
return 0;
}

下面是两个文件

PS:简单说个前提,也就是我在配置的过程中遇到的问题

在文件里面有些dev配置不一样,导致会报错,所以当你报错的时候可以选择注释掉报错的那一行或者把我注释掉的代码给释放出来

有些比如这个是acllib.c里面的,被我注释掉,因为我dev报错 了,如果你报错了,你也可以试试释放出来

也比如说acllib.h文件里面,两个函数也被我注释掉了,在我dev里面报错了,如果你用了也会报错那么你试试把代码释放出来看看行不行。

acllib.c(记得文件名不能修改,只能叫acllib然后选择.c文件)

/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ // ACLLib - Advanced C Lab Library
// Ver. 2014-07
// For Students' Lab at Zhejiang University
// Created 2008 by Gao Yuan
// Modified 2009 by Cui Liwei
// 2010 by Lan Huidong
// Revised 2012 by Li Rui
// Modified 2014 by Weng Kai for MOOC #define _CRT_SECURE_NO_WARNINGS
#define _CRT_NON_CONFORMING_SWPRINTFS #define CINTERFACE #ifdef _UNICODE
#undef _UNICODE
#endif
#ifdef UNICODE
#undef UNICODE
#endif #include "acllib.h" #include <windows.h>
#include <olectl.h>
#include <stdio.h> #ifdef _MSC_VER
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"msimg32.lib")
#endif #ifdef _DEBUG
#define ACL_ASSERT(_Expression,errStr) (void)( (!!(_Expression)) || (acl_error(errStr),0) )
#else
#define ACL_ASSERT(flag,errStr) ((void)0)
#endif #define ACL_ASSERT_HWND ACL_ASSERT(g_hWnd!=0, \
"You should call function \"initWindow(...)\" befor use function \"" __FUNCTION__ "\"" )
#define ACL_ASSERT_BEGIN_PAINT ACL_ASSERT(g_hmemdc!=0, \
"You should call function \"beginPaint()\" befor use function \"" __FUNCTION__ "\"" ) // f
int Setup(void); const char g_wndClassName[] = "ACL_WND_CLASS";
const char g_libName[] = "ACLLIB"; HINSTANCE g_hInstance; HWND g_hWnd = NULL;
HDC g_hmemdc = NULL;
HBITMAP g_hbitmap = NULL; int g_wndHeight;
int g_wndWidth; HPEN g_pen = NULL;
ACL_Color g_penColor = BLACK;
int g_penWidth = 1;
int g_penStyle = PEN_STYLE_SOLID; HBRUSH g_brush = NULL;
ACL_Color g_brushColor = BLACK;
int g_brushStyle = BRUSH_STYLE_SOLID; HFONT g_font = NULL;
char g_fontName[256] = "??ì?";
int g_textSize = 12;
ACL_Color g_textColor = BLACK;
ACL_Color g_textBkColor = WHITE; int g_caretHeight = 12;
int g_caretWidth = 6;
int g_caretX = 0;
int g_caretY = 0; int g_soundID = 0; KeyboardEventCallback g_keyboard = NULL;
MouseEventCallback g_mouse = NULL;
TimerEventCallback g_timer = NULL;
CharEventCallback g_char = NULL; LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //
void acl_error(char *errStr)
{
MessageBoxA(g_hWnd,errStr,g_libName,MB_ICONERROR);
exit(0);
} //
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
MSG msg;
WNDCLASSA wndclass; g_hInstance = hInstance;
g_hWnd = NULL;
g_keyboard = NULL;
g_mouse = NULL;
g_timer = NULL; wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = g_wndClassName; if (!RegisterClassA(&wndclass))
{
MessageBoxA(NULL, "This program requires Windows NT!", g_libName, MB_ICONERROR);
return 0;
} Setup(); ACL_ASSERT(g_hWnd,"You must call \"initWindow(...)\" in Main()"); while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
} //
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
{
HDC hdc;
hdc = GetDC(hwnd);
g_hbitmap = CreateCompatibleBitmap(
hdc, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
g_hmemdc = CreateCompatibleDC(hdc);
SelectObject(g_hmemdc, g_hbitmap);
BitBlt(g_hmemdc,
0, 0,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN),
g_hmemdc,
0, 0,
WHITENESS);
DeleteDC(g_hmemdc);
ReleaseDC(hwnd, hdc); CreateCaret(hwnd,0,g_caretWidth,g_caretHeight);
g_caretX = g_wndWidth;
g_caretY = g_wndHeight;
SetCaretPos(g_caretX,g_caretY); break;
}
case WM_ERASEBKGND:
break;
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect; hdc = BeginPaint(hwnd, &ps);
g_hmemdc = CreateCompatibleDC(hdc);
SelectObject(g_hmemdc, g_hbitmap);
GetClientRect(hwnd,&rect);
BitBlt(hdc, 0, 0, rect.right - rect.left,
rect.bottom - rect.top, g_hmemdc, 0, 0, SRCCOPY);
DeleteDC(g_hmemdc);
g_hmemdc = 0;
EndPaint(hwnd,&ps);
break;
}
case WM_CHAR:
if (g_char != NULL)
g_char((char) wParam);
break; case WM_KEYDOWN:
if (g_keyboard != NULL)
g_keyboard((int) wParam,KEY_DOWN);
break; case WM_KEYUP:
if(g_keyboard != NULL)
g_keyboard((int) wParam,KEY_UP);
break; case WM_LBUTTONDOWN:
if (g_mouse != NULL)
g_mouse((int) LOWORD(lParam), (int) HIWORD(lParam), LEFT_BUTTON, BUTTON_DOWN);
break; case WM_LBUTTONUP:
if (g_mouse != NULL)
g_mouse((int) LOWORD(lParam), (int) HIWORD(lParam), LEFT_BUTTON, BUTTON_UP);
break; case WM_LBUTTONDBLCLK:
if (g_mouse != NULL)
g_mouse((int) LOWORD(lParam), (int) HIWORD(lParam), LEFT_BUTTON, BUTTON_DOUBLECLICK);
break; case WM_MBUTTONDOWN:
if (g_mouse != NULL)
g_mouse((int) LOWORD(lParam), (int) HIWORD(lParam), MIDDLE_BUTTON, BUTTON_DOWN);
break; case WM_MBUTTONUP:
if (g_mouse != NULL)
g_mouse((int) LOWORD(lParam), (int) HIWORD(lParam), MIDDLE_BUTTON, BUTTON_UP);
break; case WM_MBUTTONDBLCLK:
if (g_mouse != NULL)
g_mouse((int) LOWORD(lParam), (int) HIWORD(lParam), MIDDLE_BUTTON, BUTTON_DOUBLECLICK);
break; case WM_RBUTTONDOWN:
if (g_mouse != NULL)
g_mouse((int) LOWORD(lParam), (int) HIWORD(lParam), RIGHT_BUTTON, BUTTON_DOWN);
break; case WM_RBUTTONUP:
if (g_mouse != NULL)
g_mouse((int) LOWORD(lParam), (int) HIWORD(lParam), RIGHT_BUTTON, BUTTON_UP);
break; case WM_RBUTTONDBLCLK:
if (g_mouse != NULL)
g_mouse((int) LOWORD(lParam), (int) HIWORD(lParam), RIGHT_BUTTON, BUTTON_DOUBLECLICK);
break; case WM_MOUSEMOVE:
if(g_mouse != NULL)
g_mouse((int) LOWORD(lParam), (int) HIWORD(lParam), MOUSEMOVE, MOUSEMOVE);
break; case WM_MOUSEWHEEL:
if(g_mouse == NULL)
break;
if(HIWORD(wParam) == 120)
g_mouse((int) LOWORD(lParam), (int) HIWORD(lParam),MIDDLE_BUTTON,ROLL_UP);
else if(HIWORD(wParam)==65416)
g_mouse((int) LOWORD(lParam), (int) HIWORD(lParam),MIDDLE_BUTTON,ROLL_DOWN);
break; case WM_TIMER:
if (g_timer != NULL)
g_timer(wParam);
break; case WM_DESTROY:
DeleteObject(g_hbitmap);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
} //
void initWindow(const char *wndName, int x, int y, int width, int height)
{
RECT rect; ACL_ASSERT(!g_hWnd,"Don't call initWindow twice"); g_wndHeight = height;
g_wndWidth = width; if(x==DEFAULT || y==DEFAULT)
x=y=CW_USEDEFAULT; g_hWnd = CreateWindowA (
g_wndClassName, wndName,
WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX & ~WS_SIZEBOX,
x, y,
width, height,
NULL, NULL, 0, NULL) ; if(!g_hWnd)
{
MessageBoxA(NULL,"Fail to create window",g_libName,MB_ICONERROR);
exit(0);
}
GetClientRect(g_hWnd,&rect);
width += width - (rect.right-rect.left);
height += height - (rect.bottom-rect.top);
SetWindowPos(g_hWnd,HWND_TOP,0,0,width,height,SWP_NOMOVE); ShowWindow (g_hWnd,1);
UpdateWindow (g_hWnd);
} void initConsole(void)
{
AllocConsole();
freopen("CONIN$", "r+t", stdin);
freopen("CONOUT$", "w+t", stdout);
} void msgBox(const char title[],const char text[],int flag)
{
ACL_ASSERT_HWND;
MessageBoxA(g_hWnd,text,title,flag);
} //
void updatePen();
void updateBrush();
void updateFont(); //
void beginPaint()
{
HDC hdc; ACL_ASSERT_HWND; hdc = GetDC(g_hWnd);
g_hmemdc = CreateCompatibleDC(hdc);
SelectObject(g_hmemdc,g_hbitmap); updatePen();
updateBrush();
updateFont();
setTextColor(g_textColor);
setTextBkColor(g_textBkColor);
} void endPaint()
{
DeleteDC(g_hmemdc);
g_hmemdc = 0;
InvalidateRect(g_hWnd,0,0); DeleteObject(g_pen);
DeleteObject(g_brush);
DeleteObject(g_font);
g_pen = NULL;
g_brush = NULL;
g_font = NULL;
} void clearDevice(void)
{
ACL_ASSERT_BEGIN_PAINT;
BitBlt(
g_hmemdc,
0, 0,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN) ,
g_hmemdc,
0, 0,
WHITENESS);
} void updatePen()
{
if(g_pen)DeleteObject(g_pen);
if(g_penColor==EMPTY)
g_pen = (HPEN)GetStockObject(NULL_PEN);
else
g_pen = CreatePen(g_penStyle,g_penWidth,g_penColor);
SelectObject(g_hmemdc,g_pen);
} void updateBrush()
{
if(g_brush)DeleteObject(g_brush);
if(g_brushColor==EMPTY)
{
g_brush = (HBRUSH)GetStockObject(NULL_BRUSH);
}
else
{
if(g_brushStyle==BRUSH_STYLE_SOLID)
g_brush = CreateSolidBrush(g_brushColor);
else
g_brush = CreateHatchBrush(g_brushStyle,g_brushColor);
}
SelectObject(g_hmemdc,g_brush);
} void updateFont()
{
if(g_font)DeleteObject(g_font);
g_font = CreateFontA(
g_textSize,
0,
0,0,700,0,0,0,0,0,0,0,0,g_fontName);
SelectObject(g_hmemdc,g_font);
} void setPenColor(ACL_Color newColor)
{
ACL_ASSERT_BEGIN_PAINT;
g_penColor = newColor;
updatePen();
} void setPenWidth(int width)
{
ACL_ASSERT_BEGIN_PAINT;
g_penWidth = width;
updatePen();
} void setPenStyle(ACL_Pen_Style newStyle)
{
ACL_ASSERT_BEGIN_PAINT; switch(newStyle)
{
case PEN_STYLE_SOLID:
g_penStyle = PS_SOLID; break;
case PEN_STYLE_DASH:
g_penStyle = PS_DASH; break;
case PEN_STYLE_DOT:
g_penStyle = PS_DOT; break;
case PEN_STYLE_DASHDOT:
g_penStyle = PS_DASHDOT; break;
case PEN_STYLE_DASHDOTDOT:
g_penStyle = PS_DASHDOTDOT; break;
case PEN_STYLE_NULL:
g_penStyle = -1;
setPenColor(EMPTY);
return;
default:
break;
}
updatePen();
} void setBrushColor(ACL_Color newColor)
{
ACL_ASSERT_BEGIN_PAINT;
g_brushColor = newColor;
updateBrush();
} void setBrushStyle(ACL_Brush_Style newStyle)
{
ACL_ASSERT_BEGIN_PAINT; switch(newStyle)
{
case BRUSH_STYLE_SOLID:
g_brushStyle = BRUSH_STYLE_SOLID; break;
case BRUSH_STYLE_HORIZONTAL:
g_brushStyle = HS_HORIZONTAL; break;
case BRUSH_STYLE_VERTICAL:
g_brushStyle = HS_VERTICAL; break;
case BRUSH_STYLE_FDIAGONAL:
g_brushStyle = HS_FDIAGONAL; break;
case BRUSH_STYLE_BDIAGONAL:
g_brushStyle = HS_BDIAGONAL; break;
case BRUSH_STYLE_CROSS:
g_brushStyle = HS_CROSS; break;
case BRUSH_STYLE_DIAGCROSS:
g_brushStyle = HS_DIAGCROSS; break;
case BRUSH_STYLE_NULL:
g_brushStyle = BRUSH_STYLE_SOLID;
setBrushColor(EMPTY);
return;
default:
break;
}
updateBrush();
} void setTextColor(ACL_Color color)
{
ACL_ASSERT_BEGIN_PAINT;
ACL_ASSERT(color!=EMPTY,"text color can not be EMPTY");
g_textColor = color;
SetTextColor(g_hmemdc,color);
} void setTextBkColor(ACL_Color color)
{
ACL_ASSERT_BEGIN_PAINT;
g_textBkColor = color;
if(color == EMPTY)
SetBkMode(g_hmemdc,TRANSPARENT);
else
{
SetBkMode(g_hmemdc,OPAQUE);
SetBkColor(g_hmemdc,color);
}
} void setTextSize(int size)
{
ACL_ASSERT_BEGIN_PAINT;
g_textSize = size;
updateFont();
} void setTextFont(const char *pfn)
{
size_t len;
ACL_ASSERT_BEGIN_PAINT;
len = strlen(pfn);
strcpy(g_fontName,pfn);
updateFont();
} void paintText(int x, int y, const char *textstring)
{
ACL_ASSERT_BEGIN_PAINT;
TextOutA(g_hmemdc, x, y, textstring, strlen(textstring));
} void putPixel(int x, int y, ACL_Color color)
{
ACL_ASSERT_BEGIN_PAINT;
SetPixel(g_hmemdc, x, y, color);
} ACL_Color getPixel(int x, int y)
{
ACL_ASSERT_BEGIN_PAINT;
return GetPixel(g_hmemdc, x, y);
} int getWidth(void)
{
RECT rect;
GetClientRect(g_hWnd, &rect);
return rect.right;
} int getHeight(void)
{
RECT rect;
GetClientRect(g_hWnd, &rect);
return rect.bottom;
} int getX(void)
{
POINT point;
ACL_ASSERT_BEGIN_PAINT;
GetCurrentPositionEx(g_hmemdc, &point);
return (int) point.x;
} int getY(void)
{
POINT point;
ACL_ASSERT_BEGIN_PAINT;
GetCurrentPositionEx(g_hmemdc, &point);
return (int) point.y;
} void moveTo(int x, int y)
{
ACL_ASSERT_BEGIN_PAINT;
MoveToEx(g_hmemdc, x, y,NULL);
} void moveRel(int dx, int dy)
{
POINT point;
ACL_ASSERT_BEGIN_PAINT;
GetCurrentPositionEx(g_hmemdc, &point);
MoveToEx(g_hmemdc, (int) point.x + dx, (int) point.y + dy,NULL);
} // Lines and Curves
void arc(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4)
{
ACL_ASSERT_BEGIN_PAINT;
Arc(g_hmemdc,x1,y1,x2,y2,x3,y3,x4,y4);
} void line(int x0, int y0, int x1, int y1)
{
POINT point;
ACL_ASSERT_BEGIN_PAINT;
GetCurrentPositionEx(g_hmemdc, &point);
MoveToEx(g_hmemdc, x0, y0, NULL);
LineTo(g_hmemdc, x1, y1);
MoveToEx(g_hmemdc,point.x,point.y,NULL);
} void lineTo(int x, int y)
{
ACL_ASSERT_BEGIN_PAINT;
LineTo(g_hmemdc, x, y);
} void lineRel(int dx, int dy)
{
POINT point;
ACL_ASSERT_BEGIN_PAINT;
GetCurrentPositionEx(g_hmemdc, &point);
LineTo(g_hmemdc, (int) point.x + dx, (int) point.y + dy);
} void polyBezier(const POINT *lppt,int cPoints)
{
PolyBezier(g_hmemdc,lppt,cPoints);
} void polyLine(const POINT *lppt, int cPoints)
{
Polyline(g_hmemdc,lppt,cPoints);
} // Filled Shapes
void chrod(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
{
ACL_ASSERT_BEGIN_PAINT;
Chord(g_hmemdc,x1, y1, x2, y2, x3, y3, x4, y4);
} void ellipse(int left,int top,int right, int bottom)
{
ACL_ASSERT_BEGIN_PAINT;
Ellipse(g_hmemdc,left,top,right,bottom);
} void pie(int left, int top, int right, int bottom, int xr1, int yr1, int xr2, int yr2)
{
ACL_ASSERT_BEGIN_PAINT;
Pie(g_hmemdc,left,top,right,bottom,xr1,yr1,xr2,yr2);
} void polygon(const POINT *apt,int cpt)
{
ACL_ASSERT_BEGIN_PAINT;
Polygon(g_hmemdc,apt,cpt);
} void rectangle(int left,int top,int right,int bottom)
{
ACL_ASSERT_BEGIN_PAINT;
Rectangle(g_hmemdc,left,top,right,bottom);
} void roundrect(int left,int top,int right,int bottom,int width,int height)
{
ACL_ASSERT_BEGIN_PAINT;
RoundRect(g_hmemdc,left,top,right,bottom,width,height);
} void polyline(POINT *apt,int cpt)
{
ACL_ASSERT_BEGIN_PAINT;
Polyline(g_hmemdc,apt,cpt);
} void putImage(ACL_Image *pImage, int x, int y)
{
HDC hbitmapdc;
ACL_ASSERT_BEGIN_PAINT;
hbitmapdc = CreateCompatibleDC(g_hmemdc);
SelectObject(hbitmapdc, pImage->hbitmap);
BitBlt(g_hmemdc, x, y, pImage->width, pImage->height, hbitmapdc,0,0,SRCCOPY);
DeleteDC(hbitmapdc);
} void putImageScale(ACL_Image *pImage,int x,int y,int width,int height)
{
HDC hbitmapdc;
ACL_ASSERT_BEGIN_PAINT;
hbitmapdc = CreateCompatibleDC(g_hmemdc);
SelectObject(hbitmapdc, pImage->hbitmap);
if(width == -1)width = pImage->width;
if(height == -1)height = pImage->height;
SetStretchBltMode(g_hmemdc,COLORONCOLOR);
StretchBlt( g_hmemdc,x,y,width,height,hbitmapdc,0,0,pImage->width,pImage->height,SRCCOPY);
DeleteDC(hbitmapdc);
} void putImageTransparent(ACL_Image *pImage,int x,int y,int width,int height, ACL_Color bkColor)
{
HDC hbitmapdc;
ACL_ASSERT_BEGIN_PAINT;
hbitmapdc = CreateCompatibleDC(g_hmemdc);
SelectObject(hbitmapdc, pImage->hbitmap);
if(width == -1)width = pImage->width;
if(height == -1)height = pImage->height;
//SetStretchBltMode(g_hmemdc,COLORONCOLOR);
//TransparentBlt(g_hmemdc,x,y,width,height,hbitmapdc,0,0,pImage->width,pImage->height,bkColor);
DeleteDC(hbitmapdc);
} void loadImage(const char *image, ACL_Image *mapbuf)
{
HDC hmapdc;
IPicture *ipicture;
IStream *istream;
DWORD filesize = 0, bytes;
OLE_XSIZE_HIMETRIC width;
OLE_YSIZE_HIMETRIC height;
HANDLE file = NULL;
HGLOBAL global = NULL;
LPVOID data = NULL; ACL_ASSERT_HWND; file = CreateFileA(image, GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);
if(file == INVALID_HANDLE_VALUE)
acl_error("Fail to load image, File not exist");
filesize = GetFileSize(file, NULL); global = GlobalAlloc(GMEM_MOVEABLE, filesize);
data = GlobalLock(global);
ReadFile(file, data, filesize, &bytes, NULL);
GlobalUnlock(global);
//CreateStreamOnHGlobal(global, TRUE, &istream); //OleLoadPicture(istream, filesize, TRUE, &IID_IPicture, (LPVOID*)&ipicture);
ipicture->lpVtbl->get_Width(ipicture, &width);
ipicture->lpVtbl->get_Height(ipicture, &height); mapbuf->width = (int)(width / 26.45833333333);
mapbuf->height = (int)(height / 26.45833333333); hmapdc = CreateCompatibleDC(GetDC(g_hWnd));
if (mapbuf->hbitmap != NULL)
DeleteObject(mapbuf->hbitmap);
mapbuf->hbitmap = CreateCompatibleBitmap(GetDC(g_hWnd), mapbuf->width, mapbuf->height);
SelectObject(hmapdc, mapbuf->hbitmap); ipicture->lpVtbl->Render(ipicture, hmapdc, 0, 0, mapbuf->width, mapbuf->height, 0, height, width, -height, NULL);
ipicture->lpVtbl->Release(ipicture);
istream->lpVtbl->Release(istream); DeleteDC(hmapdc);
GlobalFree(global);
CloseHandle(file);
} void freeImage(ACL_Image *mapbuf)
{
if(mapbuf->hbitmap) return;
DeleteObject(mapbuf->hbitmap);
mapbuf->hbitmap = NULL;
} void registerKeyboardEvent(KeyboardEventCallback callback)
{
g_keyboard = callback;
} void registerCharEvent(CharEventCallback callback)
{
g_char = callback;
} void registerMouseEvent(MouseEventCallback callback)
{
g_mouse = callback;
} void registerTimerEvent(TimerEventCallback callback)
{
g_timer = callback;
} void startTimer(int id,int timeinterval)
{
SetTimer(g_hWnd, id, timeinterval, NULL);
} void cancelTimer(int id)
{
KillTimer(g_hWnd, id);
} void loadSound(const char *fileName,ACL_Sound *pSound)
{
char *cmdStr;
int len = strlen(fileName)*sizeof(char);
len +=64;
cmdStr = (char*)malloc(len);
sprintf(cmdStr,"open \"%s\" type mpegvideo alias S%d",fileName,g_soundID);
*pSound = g_soundID;
++g_soundID;
mciSendStringA(cmdStr,NULL,0,NULL);
free(cmdStr);
} void playSound(int sid,int repeat)
{
char cmdStr[32];
stopSound(sid);
if(repeat)
sprintf(cmdStr,"play S%d from 0 repeat",sid);
else
sprintf(cmdStr,"play S%d from 0",sid);
mciSendStringA(cmdStr,NULL,0,NULL);
} void stopSound(int sid)
{
char cmdStr[32];
sprintf(cmdStr,"stop S%d",sid);
mciSendStringA(cmdStr,NULL,0,NULL);
} void setCaretSize(int w,int h)
{
DestroyCaret();
CreateCaret(g_hWnd,0,w,h);
SetCaretPos(g_caretX,g_caretY);
} void setCaretPos(int x,int y)
{
g_caretX = x;
g_caretY = y;
SetCaretPos(g_caretX,g_caretY);
} void showCaret()
{
ShowCaret(g_hWnd);
} void hideCaret()
{
HideCaret(g_hWnd);
}

acllib.h(同样不能修改文件名,要是acllib选择.h头文件,你要修改的话里面的包含头文件代码也要修改)

代码:

/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ // ACLLib - Advanced C Lab Library
// Ver 2014-07
// For students' Lab at Zhejiang University
// Created 2008 by Gao Yuan
// Modified 2009 by Cui Liwei
// 2010 by Lan Huidong
// Revised 2012 by Li Rui
// Modified 2014 by Weng Kai for MOOC /*
For Dev C++, these lib files need to be added into linker options.
Be sure to change the leading folders as your installation.
"C:/Program Files/Dev-Cpp/MinGW32/lib/libwinmm.a"
"C:/Program Files/Dev-Cpp/MinGW32/lib/libmsimg32.a"
"C:/Program Files/Dev-Cpp/MinGW32/lib/libkernel32.a"
"C:/Program Files/Dev-Cpp/MinGW32/lib/libuser32.a"
"C:/Program Files/Dev-Cpp/MinGW32/lib/libgdi32.a"
"C:/Program Files/Dev-Cpp/MinGW32/lib/libole32.a"
"C:/Program Files/Dev-Cpp/MinGW32/lib/liboleaut32.a"
"C:/Program Files/Dev-Cpp/MinGW32/lib/libuuid.a"
*/ #ifndef __ACLLIB_H__
#define __ACLLIB_H__ #ifdef _UNICODE
#undef _UNICODE
#endif
#ifdef UNICODE
#undef UNICODE
#endif #include <Windows.h> #define BLACK RGB(0, 0, 0)
#define RED RGB(255, 0, 0)
#define GREEN RGB(0, 255, 0)
#define BLUE RGB(0, 0, 255)
#define CYAN RGB(0, 255, 255)
#define MAGENTA RGB(255, 0, 255)
#define YELLOW RGB(255, 255, 0)
#define WHITE RGB(255, 255, 255) #define EMPTY 0xffffffff
#define DEFAULT -1 typedef enum
{
PEN_STYLE_SOLID,
PEN_STYLE_DASH, /* ------- */
PEN_STYLE_DOT, /* ....... */
PEN_STYLE_DASHDOT, /* _._._._ */
PEN_STYLE_DASHDOTDOT, /* _.._.._ */
PEN_STYLE_NULL
} ACL_Pen_Style; typedef enum
{
BRUSH_STYLE_SOLID = -1,
BRUSH_STYLE_HORIZONTAL, /* ----- */
BRUSH_STYLE_VERTICAL, /* ||||| */
BRUSH_STYLE_FDIAGONAL, /* \\\\\ */
BRUSH_STYLE_BDIAGONAL, /* / */
BRUSH_STYLE_CROSS, /* +++++ */
BRUSH_STYLE_DIAGCROSS, /* xxxxx */
BRUSH_STYLE_NULL
} ACL_Brush_Style; typedef enum
{
NO_BUTTON = 0,
LEFT_BUTTON,
MIDDLE_BUTTON,
RIGHT_BUTTON
} ACL_Mouse_Button; typedef enum
{
BUTTON_DOWN,
BUTTON_DOUBLECLICK,
BUTTON_UP,
ROLL_UP,
ROLL_DOWN,
MOUSEMOVE
} ACL_Mouse_Event; typedef enum
{
KEY_DOWN,
KEY_UP
} ACL_Keyboard_Event; typedef struct
{
HBITMAP hbitmap;
int width;
int height;
} ACL_Image; //typedef enum
//{
// TM_NO = 0x00,
// TM_COLOR = 0x01,
// TM_ALPHA = 0x02
//} ACL_TransparentMode; typedef COLORREF ACL_Color;
typedef int ACL_Sound; typedef void(*KeyboardEventCallback) (int key, int event);
typedef void(*CharEventCallback) (char c);
typedef void(*MouseEventCallback) (int x, int y, int button, int event);
typedef void(*TimerEventCallback) (int timerID); #ifdef __cplusplus
extern "C" {
#endif int Setup(void); //
void initWindow(const char title[], int left, int top, int width, int height);
void msgBox(const char title[], const char text[], int flag); void registerKeyboardEvent(KeyboardEventCallback callback);
void registerCharEvent(CharEventCallback callback);
void registerMouseEvent(MouseEventCallback callback);
void registerTimerEvent(TimerEventCallback callback); void startTimer(int timerID, int timeinterval);
void cancelTimer(int timerID); // Sound
void loadSound(const char *fileName, ACL_Sound *pSound);
void playSound(ACL_Sound soundID, int repeat);
void stopSound(ACL_Sound soundID); // Paint
void beginPaint();
void endPaint();
void clearDevice(void);
int getWidth();
int getHeight(); // Pen
void setPenColor(ACL_Color color);
void setPenWidth(int width);
void setPenStyle(ACL_Pen_Style style); // Brush
void setBrushColor(ACL_Color color);
void setBrushStyle(ACL_Brush_Style style); // Text
void setTextColor(ACL_Color color);
void setTextBkColor(ACL_Color color);
void setTextSize(int size);
void setTextFont(const char *pFontName); void paintText(int x, int y, const char *pStr); void setCaretSize(int w, int h);
void setCaretPos(int x, int y);
void showCaret();
void hideCaret(); // Pixel
void putPixel(int x, int y, ACL_Color color);
ACL_Color getPixel(int x, int y); // the Point
int getX(void);
int getY(void);
void moveTo(int x, int y);
void moveRel(int dx, int dy); // Lines and Curves
void arc(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, \
int nXStartArc, int nYStartArc, int nXEndArc, int nYEndArc);
void line(int x0, int y0, int x1, int y1);
void lineTo(int nXEnd, int nYEnd);
void lineRel(int dx, int dy);
void polyBezier(const POINT *lppt, int cPoints);
void polyLine(const POINT *lppt, int cPoints); // Filled Shapes
void chrod(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, \
int nXRadial1, int nYRadial1, int nXRadial2, int nYRadial2);
void ellipse(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
void pie(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, \
int nXRadial1, int nYRadial1, int nXRadial2, int nYRadial2);
void polygon(const POINT *lpPoints, int nCount);
void rectangle(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
void roundrect(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, \
int nWidth, int nHeight); // Image
void loadImage(const char *pImageFileName, ACL_Image *pImage);
void freeImage(ACL_Image *pImage); void putImage(ACL_Image *pImage, int x, int y);
void putImageScale(ACL_Image *pImage, int x, int y, int width, int height);
void putImageTransparent(ACL_Image *pImage, int x, int y, int width, int height, ACL_Color bkColor); //void putImageEx(ACL_Image *pImage,int dx,int dy,int dw,int dh,
// int sx,int sy,int sw,int sh); //void setTransparentMode(ACL_TransparenetMode);
//void setTransparentColor(ACL_Color);
//void setTransparetnAlpha(int alpha); void initConsole(void); #ifdef __cplusplus
}
#endif #endif

C语言:ACLLIB图形库——如何搭建环境(附三个文件代码)的更多相关文章

  1. C入门语言基础一[可移植性、涉及的三种文件、编程7个步骤、编译器、链接器]

    Review Questions What dose portability mean in the context of programming? 文中讲到的可移植性是什么意思?   C本身是不涉及 ...

  2. WIN32_FIND_DATA 详细结构(附循环读取文件代码)

    //去除路径最后多余的斜杠和反斜杠 std::string TrimPath(std::string path) { //string test3("内容"); 使用引用字符数组作 ...

  3. QT树莓派交叉编译环开发环境搭建(附多个exe工具下载链接)

    前两天入手了一块2.8’的tft液晶显示屏,于是和树莓派连了一发,成功将命令行显示在了这块小的可怜的屏幕上之后,觉得这屏幕就显示个黑白内容太浪费了,于是考虑开发一个”脸”(图形用户界面,GUI).首先 ...

  4. Java基础笔记(1) 语言 JAVA的历史 Java的搭建环境

    本文除了搭建是重点,其他的都当阅读小说一样去看就好了,不想看可以直接抓住重点,我会改变颜色勾出重点! 英语是人与人交流沟通的重要方式之一.JAVA:是人与计算机沟通交流重要方式之一.我们除了用java ...

  5. Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2 【转】

    一.安装Golang的SDK 在官网 http://golang.org/ 直接下载安装包安装即可.下载pkg格式的最新安装包,直接双击运行,一路按照提示操作即可完成安装. 安装完成后,打开终端,输入 ...

  6. Ext.NET 4.1 系统框架的搭建(后台) 附源码

    Ext.NET 4.1 系统框架的搭建(后台) 附源码 代码运行环境:.net 4.5  VS2013 (代码可直接编译运行) 预览图: 分析图: 上面系统的构建包括三块区域:North.West和C ...

  7. ActiveReports 9实战教程(1): 手把手搭建环境Visual Studio 2013 社区版

    原文:ActiveReports 9实战教程(1): 手把手搭建环境Visual Studio 2013 社区版 ActiveReports 9刚刚发布3天,微软就发布了 Visual Studio ...

  8. 搭建环境Visual Studio 2013 社区版

    搭建环境Visual Studio 2013 社区版 ActiveReports 9刚刚发布3天,微软就发布了 Visual Studio Community 2013 开发环境. Visual St ...

  9. php 手动搭建环境

    php手动搭建环境有好多种组合,版本号不一致,会导致搭建失败. 我搭建的组合是: php5.6+MySQL5.6+Apache2.4的组合. 一.PHP语言包下载 首先从官网上下载php5.6 htt ...

  10. PHP手动搭建环境

    php手动搭建环境有好多种组合,版本号不一致,会导致搭建失败. 我搭建的组合是: php5.6+MySQL5.6+Apache2.4的组合. 一.PHP语言包下载 首先从官网上下载php5.6 htt ...

随机推荐

  1. #排列组合,dp#AT2000 [AGC002F] Leftmost Ball

    洛谷题目传送门 ATCODER传送门 分析 设\(dp[i][j]\)表示放完\(i\)个白球和\(j\)种有颜色的球的情况 首先\(dp[i][j]\)显然可以从\(dp[i-1][j]\)转移, ...

  2. FastWiki发布`0.2.4`支持js 函数

    FastWiki发布0.2.4支持js 函数 Release v0.2.4 · AIDotNet/fast-wiki (github.com) 支持JS动态functioncall调用 支持动态fun ...

  3. SpringBoot中bean的生命周期

    目录 概述 使用场景 代码演示bean初始化 TestSupport BeanPostProcessorImpl log 代码 概述 Bean 生命周期管理是 Spring Boot 中的关键功能之一 ...

  4. Numpy通用函数及向量化计算

    Python(Cpython)对于较大数组的循环操作会比较慢,因为Python的动态性和解释性,在做每次循环时,必须做数据类型的检查和函数的调度. Numpy为很多类型的操作提供了非常方便的.静态类型 ...

  5. 【郑州轻工业大学】HarmonyOS宠物健康系统的开发分享

    原文:https://mp.weixin.qq.com/s/upcS6PcMS7UBR5jgoP7eow,点击链接查看更多技术内容. 本期我们给大家带来的是家庭宠物健康监测系统开发者杨光的分享,希望能 ...

  6. Launching Teamviewer remotely through SSH

    Launching Teamviewer remotely through SSH When you need to manage your Server remotely, but you can ...

  7. 关于console.log中this指向的问题

  8. three.js实现数字孪生3D仓库一期(开源)

    大家好,本文使用three.js实现了3D仓库一期项目,给出了代码,分析了关键点,感谢大家~ 关键词:数字孪生.three.js.Web3D.WebGL.智慧仓库.开源 代码:Github 我正在承接 ...

  9. 简单的使用Echars制作柱状图

    简单的使用Echars制作柱状图 html如下 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  10. 力扣388(java)-文件的最长绝对路径(中等)

    题目: 假设有一个同时存储文件和目录的文件系统.下图展示了文件系统的一个示例: 这里将 dir 作为根目录中的唯一目录.dir 包含两个子目录 subdir1 和 subdir2 .subdir1 包 ...