在工程里添加了一个新的类(继承view),但在类里的ondraw里写了代码却画不出图来

青樊 2017-12-17 11:41:24
为了测试我只写了简单的画线代码,运行的时候不报错但是画不出图

头文件代码
public:
virtual void OnDraw(CDC* pDC);
void Drawx(CDC* pDC);
drawxy2(); // 动态创建所使用的受保护的构造函数
virtual ~drawxy2();
void BgetDC();
CDC *pDC;
程序定义代码
void drawxy2::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();

pDC->MoveTo(0,0);

pDC->LineTo(1000,1000); // TODO: 在此添加绘制代码
}
void drawxy2::Drawx(CDC* pDC)
{

pDC->MoveTo(0,0);

pDC->LineTo(1000,1000);

}

主程序代码
void main()
{

drawxy2 drawx1;
HDC hddc=::GetDC(0);
CDC ddc;
ddc.Attach(hddc);
drawx1.Drawx(&ddc);
drawx1.OnDraw(&ddc);

}

求大神帮助
...全文
398 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-01-15
  • 打赏
  • 举报
回复
面向对象只是一种编程思想。 再抽象的编程语言,最后不都变成汇编代码了吗?我们完全可以说汇编语言是面向对象、脚本化、动态化、泛函化、并行化、分布化的语言。
mlqxj35674 2018-01-15
  • 打赏
  • 举报
回复
这代码写的,像控制台程序,又像以c#,还派生了一个cview,似乎与MFC沾边,其实是四不象。 一点提示,MFC文档视图结构程序中,不是随便加个CView,就能画出图来,要与文档视图框架组合起来才能,否则你需要抛开文档视图结构。
青樊 2017-12-17
  • 打赏
  • 举报
回复
我也想先打好基础,但老师一上来就让弄这个,也是实属无奈, 我现在的目的是自己建一个类,然后通过调用这个类来画个简单图形(矩形,圆,直线,什么都行),然后我就自己继承了一个view类,起名叫drawxy2,里面定义了两个共有成员函数,,运行时不报错但是不出现图。我考虑是不是我的CDC没传进去,或者我这个类里少定义了什么东西。 就想把这个地方弄清楚,能画条线出来就行了,困扰我一整天了 谢谢大神帮助
赵4老师 2017-12-17
  • 打赏
  • 举报
回复
仅供参考:
#pragma comment(lib,"user32")
#pragma comment(lib,"gdi32")
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
extern "C" HWND WINAPI GetConsoleWindow();
void HideTheCursor() {
    CONSOLE_CURSOR_INFO cciCursor;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

    if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {
        cciCursor.bVisible = FALSE;
        SetConsoleCursorInfo(hStdOut, &cciCursor);
    }
}
void ShowTheCursor() {
    CONSOLE_CURSOR_INFO cciCursor;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

    if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {
        cciCursor.bVisible = TRUE;
        SetConsoleCursorInfo(hStdOut, &cciCursor);
    }
}
int main() {
    HWND  hwnd;
    HDC   hdc;
    HFONT hfont;

    system("color F0");
    system("cls");
    HideTheCursor();
    hwnd  = GetConsoleWindow();
    hdc   = GetDC(hwnd);
    hfont = CreateFont(48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");
    SelectObject(hdc,hfont);
    TextOut(hdc,10,10,"地球人都知道!",14);
    MoveToEx(hdc,5,5,NULL);
    LineTo(hdc,300,  5);
    LineTo(hdc,300, 60);
    LineTo(hdc,  5, 60);
    LineTo(hdc,  5,  5);
    DeleteObject(hfont);
    ReleaseDC(hwnd,hdc);
    getchar();
    system("color 07");
    system("cls");
    ShowTheCursor();
    return 0;
}
真相重于对错 2017-12-17
  • 打赏
  • 举报
回复
建议先把win32程序学好再写? 不要盲目的闭门造车。 推荐一本书,《深入浅出MFC》 网上大把的电子版。
schlafenhamster 2017-12-17
  • 打赏
  • 举报
回复
不应该使用 控制台(main) 工程,应该使用 win32 工程
schlafenhamster 2017-12-17
  • 打赏
  • 举报
回复
必须先 得到 HWND hwnd=GetConsoleWindow(); 然后 可以做 你的 事了 typedef HWND(WINAPI *PROCGETCONSOLEWINDOW)(); PROCGETCONSOLEWINDOW GetConsoleWindow; int main( ) {// vc6 HMODULE hKernel32=GetModuleHandle("kernel32"); GetConsoleWindow=(PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow"); HWND hwnd=GetConsoleWindow(); HDC hdc = GetDC(hwnd); ////////////////////////////////////////////////////////

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧