為了測驗我只寫了簡單的畫線代碼,運行的時候不報錯但是畫不出圖
頭檔案代碼
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);
}
求大神幫助
uj5u.com熱心網友回復:
建議先把win32程式學好再寫?不要盲目的閉門造車。
推薦一本書,《深入淺出MFC》
網上大把的電子版。
uj5u.com熱心網友回復:
僅供參考:#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;
}
uj5u.com熱心網友回復:
我也想先打好基礎,但老師一上來就讓弄這個,也是實屬無奈,我現在的目的是自己建一個類,然后通過呼叫這個類來畫個簡單圖形(矩形,圓,直線,什么都行),然后我就自己繼承了一個view類,起名叫drawxy2,里面定義了兩個共有成員函式,,運行時不報錯但是不出現圖。我考慮是不是我的CDC沒傳進去,或者我這個類里少定義了什么東西。
就想把這個地方弄清楚,能畫條線出來就行了,困擾我一整天了
謝謝大神幫助
uj5u.com熱心網友回復:
必須先 得到 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);
////////////////////////////////////////////////////////
uj5u.com熱心網友回復:
不應該使用 控制臺(main) 工程,應該使用 win32 工程uj5u.com熱心網友回復:
這代碼寫的,像控制臺程式,又像以c#,還派生了一個cview,似乎與MFC沾邊,其實是四不象。一點提示,MFC檔案視圖結構程式中,不是隨便加個CView,就能畫出圖來,要與檔案視圖框架組合起來才能,否則你需要拋開檔案視圖結構。
uj5u.com熱心網友回復:
面向物件只是一種編程思想。再抽象的編程語言,最后不都變成匯編代碼了嗎?我們完全可以說匯編語言是面向物件、腳本化、動態化、泛函化、并行化、分布化的語言。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/76853.html
標籤:基礎類
上一篇:CString初始化失敗
