VC++6.0 C语言 画一个斜椭圆

椭圆的倾斜角是任意的求完整代码... 椭圆的倾斜角是任意的
求完整代码
展开
 我来答
xmcong2000
2014-12-10 · TA获得超过3471个赞
知道大有可为答主
回答量:1919
采纳率:0%
帮助的人:1292万
展开全部

你好

很高兴为你解答


答案是:基于对话框的程序:

void CVc6aDlg::OnPaint() 
{
if (IsIconic())
{
   .......................
}
else
{
//就是下面的代码
CPaintDC dc(this);
::SetGraphicsMode(dc.GetSafeHdc(),GM_ADVANCED);
XFORM xf;
xf.eDx =xf.eDy = 0;
xf.eM11 = 0.4330; //0.5 * cos(30)
xf.eM12 = -0.25;//0.5 * [- sin( 30 )]
xf.eM21 = 0.25;//0.5 * sin ( 30 )
xf.eM22 = 0.4330;// 0.5 * cos( 30 )
::SetWorldTransform(dc.GetSafeHdc(),&xf);
dc.Ellipse(100,300, 300,200);
   
CDialog::OnPaint();
}
}

满意请采纳,谢谢

金鱼8884
2015-10-03 · 知道合伙人数码行家
金鱼8884
知道合伙人数码行家
采纳数:124 获赞数:14950
学生

向TA提问 私信TA
展开全部
#include <windows.h>
#pragma comment(linker, "/subsystem:windows")
int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmd, INT nShow)
{
    HWND h = CreateWindowA("#32770", "椭圆", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        CW_USEDEFAULT, CW_USEDEFAULT, 300, 200,
        0, 0, hInst, 0);
    HWND hs = CreateWindowA("Static", "", WS_CHILD | WS_VISIBLE | SS_BITMAP,
        0, 0, 200, 100, h, 0, hInst, 0);
    HDC d = GetDC(hs);
    HBITMAP b = CreateCompatibleBitmap(d, 200, 100);
    HDC m = CreateCompatibleDC(d);
    SelectObject(m, b);
    BitBlt(m, 0, 0, 200, 100, d, 0, 0, WHITENESS);
    Ellipse(m, 0, 0, 200, 100);
    DeleteDC(m);
    ReleaseDC(hs, d);
    SendMessage(hs, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)b);
    MSG mg;
    while( GetMessageA(&mg, 0, 0, 0) > 0 ) {
        if (mg.message == <a href="https://www.baidu.com/s?wd=WM_COMMAND&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3P1b4ryfvujI9nhmYnhR40ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1m3njfvPWc1rHRLnjf1rH64n6" target="_blank" class="baidu-highlight">WM_COMMAND</a> && mg.wParam == (WPARAM)MAKEWORD(IDCANCEL, BN_CLICKED))
            break;
        TranslateMessage(&mg);
        DispatchMessageA(&mg);
    }
    DeleteObject(b);
    DestroyWindow(h);
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
空雪梦见
2014-12-10 · TA获得超过5597个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1199万
展开全部
#include <windows.h>
#include <math.h>
#pragma comment(linker, "/subsystem:windows")
int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmd, INT nShow)
{
    HWND h = CreateWindowA("#32770", "椭圆", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,
        0, 0, hInst, 0);
    HWND hs = CreateWindowA("Static", "", WS_CHILD | WS_VISIBLE | SS_BITMAP,
        0, 0, 200, 100, h, 0, hInst, 0);
    HDC d = GetDC(hs);
    HBITMAP b = CreateCompatibleBitmap(d, 400, 200);
    HDC m = CreateCompatibleDC(d);
    SetGraphicsMode(m, GM_ADVANCED);
    SelectObject(m, b);
    BitBlt(m, 0, 0, 400, 400, d, 0, 0, WHITENESS);
    float angle = 30 * 3.141592f / 360.0f;
    XFORM xf;
    xf.eM11 = cos(angle); xf.eM12 = sin(angle);
    xf.eM21 = -sin(angle); xf.eM22 = cos(angle);
    xf.eDx = 0.0f; xf.eDy = 0.0f;
    SetWorldTransform(m, &xf);
    SetWindowOrgEx(m, -100, -50, NULL);
    Ellipse(m, 0, 0, 200, 100);
    DeleteDC(m);
    ReleaseDC(hs, d);
    SendMessage(hs, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)b);
    MSG mg;
    while( GetMessageA(&mg, 0, 0, 0) > 0 ) {
        if (mg.message == WM_COMMAND && mg.wParam == (WPARAM)MAKEWORD(IDCANCEL, BN_CLICKED))
            break;
        TranslateMessage(&mg);
        DispatchMessageA(&mg);
    }
    DeleteObject(b);
    DestroyWindow(h);
    return 0;
}

angle的那个30是30度,自己改

来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式