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

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. 18 JavaScript中的三元运算

    18 JavaScript中的三元运算 先来看一个例子: let a = 10; let b = 20; let d = a > b? a: b console.log(d); // 20 三元 ...

  2. C# Winform Socket点对点通信

    前言 Socket的英文原义是"孔"或"插座",其实在网络编程中Socket就是这个意思,就像我们打电话,要首先知道对方的手机号一样,这个手机号就相当于一个So ...

  3. 强!推荐一款API 接口自动化测试平台!

    在项目开发,迭代交付过程中开发人员,测试人员需要针对系统微服务API做调试,回归测试,性能测试.自动化测试,一个好的平台本质上需要解决API测试的5大基本问题. 1.支持不同的项目,角色,技术人员多人 ...

  4. 20个Python 正则表达式应用与技巧

    本文分享自华为云社区<Python 正则表达式大揭秘应用与技巧全解析>,作者:柠檬味拥抱. Python 中的 re 模块是用于处理正则表达式的强大工具.正则表达式是一种用来匹配字符串的模 ...

  5. Windows Server 2012 安装WireShark

    一.环境说明 Windows Server 2012 R2 版本64位: 安装wireshark 二.问题描述 安装wireshark提示 The Visual C++ Redistributable ...

  6. Hive 查看,删除分区

    查看所有分区 show partitions 表名; 删除一般会有两种方案 1.直接删除hdfs文件 亲测删除hdfs路径后 查看分区还是能看到此分区 可能会引起其他问题 此方法不建议 2. 使用删除 ...

  7. sql 语句系列(众数中位数与百分比)[八百章之第十五章]

    众数 众数就是出现最多的那个数. select sal,count(*) as cnt from emp where DEPTNO=20 group by sal 通过分组把他们的行数计算出来.那么最 ...

  8. few-shot-learning for object detection

    github  https://github.com/LiuXinyu12378/few-shot-learning-for-object-detection train.py from __futu ...

  9. eclipse tomcat的一些错误

    eclipse tomcat运行错误 错误提示: Server Tomcat v7.0 Server at localhost was unable to start within 45 second ...

  10. 宜搭5月更新:跨应用数据读写能力升级,AI组件内测开放

    ​简介:表单.权限管理.AI组件等功能上新啦- 本次,我们带来了表单.权限管理.数据管理.平台管理权限.组件等功能的升级. 表单 支持跨应用数据查询 在使用组件数据联动.关联其他表单数据.关联表单组件 ...