C++中怎么用API作图啊 ,要包含啥头文件吗? 在先急等

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中怎么用API作图啊 ,要包含啥头文件吗? 在先急等相关的知识,希望对你有一定的参考价值。

vc6.0 C++中怎么用API作图啊 ,要包含什么头文件吗?
不是用MFC哦。希望有例子,画个圆 矩形等等

MFC实际上也是调用了API来作图。你说的问题实际上是过去没MFC时,用C/C++和WIN API开发Windows程序的技术。这技术已经淘汰了!但是越老的技术貌似越强大!
MSDN上有WIN32程序开发的例子。 你用向导添加一个WIN32项目,再自己重写OnPaint()函数,最后用InvalidateRect(),来激发一个重画事件。
做图要用到API:
void OnPaint(HWND hWnd,UINT message, WPARAM wParam, LPARAM lParam)

PAINTSTRUCT ps;
HDC hdc;
hdc=BeginPaint(hWnd,&ps); //GetDC本质上调用了这个
//在这里加画图代码。如:
Ellipse(hdc,0,0,100,100); //画圆
Rectangle(hdc,0,100,100,200);//画矩形
TextOut(hdc,50,50,_T("Hello, World"),6); //文字也是图
EndPaint(hWnd,&ps); //释放DC handle
参考技术A MFC的绘图类其实是对Windows GDI API的封装,目前发展到GDI+,其实直接使用GDI+也是相当强大的,我给你介绍一下怎么使用windows的GDI+吧:

(1)准备使用GDI+ 的API
#include <windows.h>
#include <gdiplus.h>
using namespace Gdiplus;
(2)列子:
VOID Example_DrawLine(HDC hdc) // 函数参数为当前绘图设备上下文的句柄
Graphics graphics(hdc); // 构造一个graphics对象,然后绘图就引用此对象方法即可,厉害啊
Pen blackPen(Color(255, 0, 0, 0), 3); // 创建画笔
Point point1(100, 100); // 两个点
Point point2(500, 100);
graphics.DrawLine(&blackPen, point1, point2); // 画一条线

VOID Example_DrawRectangle(HDC hdc)

Graphics graphics(hdc);
Pen blackPen(Color(255, 0, 0, 0), 3);
Rect rect(0, 0, 200, 200); // 矩形
graphics.DrawRectangle(&blackPen, rect);

VOID Example_DrawEllipse(HDC hdc

Graphics graphics(hdc);
Pen bluePen(Color(255, 0, 0, 255));
Rect ellipseRect(0, 0, 200, 100);
graphics.DrawEllipse(&bluePen, ellipseRect);


相信你看了这几个列子应该知道怎么使用GDI+ 的API来作图了
参考技术B 一个不停地显示随机矩形的程序
#include <windows.h>

#include <stdlib.h>// for the rand function

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

void DrawRectangle (HWND) ;

int cxClient, cyClient ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)



static TCHAR szAppName[] = TEXT ("RandRect") ;

HWND hwnd ;

MSG msg ;

WNDCLASS wndclass ;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;

wndclass.lpfnWndProc= WndProc ;

wndclass.cbClsExtra = 0 ;

wndclass.cbWndExtra = 0 ;

wndclass.hInstance = hInstance ;

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;

wndclass.lpszMenuName= NULL ;

wndclass.lpszClassName= szAppName ;

if (!RegisterClass (&wndclass))



MessageBox (NULL, TEXT ("This program requires Windows NT!"),

szAppName, MB_ICONERROR) ;

return 0 ;



hwnd = CreateWindow (szAppName, TEXT ("Random Rectangles"),

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, CW_USEDEFAULT,

CW_USEDEFAULT, CW_USEDEFAULT,

NULL, NULL, hInstance, NULL) ;

ShowWindow (hwnd, iCmdShow) ;

UpdateWindow (hwnd) ;

while (TRUE)



if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))



if (msg.message == WM_QUIT)

break ;

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;



else

DrawRectangle (hwnd) ;



return msg.wParam ;



LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)



switch (iMsg)



case WM_SIZE:

cxClient = LOWORD (lParam) ;

cyClient = HIWORD (lParam) ;

return 0 ;

case WM_DESTROY:

PostQuitMessage (0) ;

return 0 ;



return DefWindowProc (hwnd, iMsg, wParam, lParam) ;



void DrawRectangle (HWND hwnd)



HBRUSHhBrush ;

HDC hdc ;

RECT rect ;

if (cxClient == 0 || cyClient == 0)

return ;

SetRect (&rect, rand () % cxClient, rand () % cyClient,

rand () % cxClient, rand () % cyClient) ;

hBrush = CreateSolidBrush (

RGB (rand () % 256, rand () % 256, rand () % 256)) ;

hdc = GetDC (hwnd) ;

FillRect (hdc, &rect, hBrush) ;

ReleaseDC (hwnd, hdc) ;

DeleteObject (hBrush) ;

参考资料:Windows程序设计中文版(CHM)

参考技术C #include "windows.h"
#include "winuser.h"
#include "wingdi.h"

HWND hwnd = 0; //如果是0,则表示在屏幕上画
HDC hdc = GetDC(hwnd);
Ellipse(hdc,0,0,100,100); //画圆
Rectangle(hdc,0,100,100,200);//画矩形
ReleaseDC(hwnd,hdc);
参考技术D 先包含windows.h再说。

C++中使用Thread类需要包含啥头文件

Java中可以直接从类Thread继承,C++中可以吗?如果可以,需要包含什么头文件呢?

  包含头文件 #include <thread>

1、std::thread 的使用非常放便和强大,该类几乎可以把任何函数作为线程主函数。
2、用法:
    首先包含头文件 #include <thread>
    定义线程主函数: 根据不同的需要,线程的主函数可以是普通函数、函数对象、lambda表达式或者类成员函数。
    建立std::thread对象,并把线程要运行的函数(线程主函数)以及相应的函数参数通过构造函数传递给该对象, 构造函数通常会海纳百川。
例程:

#include <thread>
#include <iostream>
class ThreadMain 
public:
    void operator()() 
        run();
    
    void run() 
        std::cout << "Hello, C++11 thread\\n";
    
;
void generalFunc(int data) 
    std::cout << "Hello, C++11 thread\\n";

int main() 
    ThreadMain tm;
    std::thread t1(generalFunc, 1);        /*传递普通函数指针和参数0给thread对象t1*/
    std::thread t2(&ThreadMain::run, &tm);   /*将成员函数传递给thread对象t2, 并且传递调用该函数的对象的指针&tm*/
    std::thread t3(tm);     /*传递一个函数对象给t3*/
    std::thread t4([]()  std::cout << "Hello, C++11 thread\\n"; ); /*传递lambda表达式给thread对象t4*/
    /* 调用join函数等待线程终止,并回收线程所占资源*/
    t1.join();
    t2.join();
    t3.join();
    t4.join();

参考技术A 看操作系统,标准C++没有现成的概念,但是c里面提供了这些线程的api
windows和linux略有不同本回答被提问者采纳
参考技术B #include <thread>

以上是关于C++中怎么用API作图啊 ,要包含啥头文件吗? 在先急等的主要内容,如果未能解决你的问题,请参考以下文章

C++中使用Thread类需要包含啥头文件

c语言里有memset()怎么用?需要啥头文件?

qt调用sleep,要包含啥头文件

VC++中的string类要包含啥头文件?

linux系统调用包含啥头文件

c 中conio.h是啥头文件?c++中能用吗