C_and_CPP 板


LINE

開發平台(Platform): (Ex: Win10, Linux, ...) win7 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) Visual Studio 2013 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 小弟最近剛入門MFC 正在依照書本範例執行程式 但是剛剛依照書本程式範例輸入程式碼卻無法正確執行 麻煩各位前輩指點迷津 預期的正確結果(Expected Output): 應該要可以在視窗上繪圖 錯誤結果(Wrong Output): 視窗上點擊左鍵卻無反應 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/jazfJE #include <afxwin.h> #include "resource.h" #include <afxtempl.h> //定義樣板類別的標頭檔 class MyDoc : public CDocument //Document的資料儲存 { public: CArray<CPoint, CPoint &> pArray; //容納滑鼠軌跡的Array容器 void AddPoint(CPoint p) //將軌跡點加到容器內 { pArray.Add(p); } CPoint GetPoint(int i) //將軌跡點從容器中取出 { return pArray[i]; } int GetSiez() //取得容器的大小 { return pArray.GetSize(); } DECLARE_DYNCREATE(MyDoc) //宣告 run-time類別 DECLARE_MESSAGE_MAP() //宣告訊息映射表 }; IMPLEMENT_DYNCREATE(MyDoc,CDocument) //宣告MyDoc為run-time類別 BEGIN_MESSAGE_MAP(MyDoc,CDocument) //建立訊息映射表 END_MESSAGE_MAP() class MyView : public CView //將儲存的資料顯示 { public: void OnDraw(CDC * aDC) //複寫OnDraw(必須複寫的虛擬函數) { MyDoc *doc = (MyDoc *)GetDocument(); //取得目前Document物件的指標 int num = doc->GetSiez(); //取得目前儲存的軌跡點點數 int i; for (i = 0; i < num; ++i) //將MyDOc中儲存的軌跡點重繪到視窗上 { CPoint point = doc->GetPoint(i); //取出doc物件中儲存的第i個滑鼠軌跡點 aDC->SetPixel(point, RGB(255, 0, 0)); //將滑鼠軌跡點繪於畫布上 } } afx_msg void OnButtonDown(UINT , CPoint point) { SetCapture(); } //取得滑鼠訊息的接收權 afx_msg void OnMouseMove(UINT , CPoint point) { if (this == GetCapture()) //GetCapture()函數檢查滑鼠游標是否在這個應用程式的 視窗上 { CClientDC aDC(this); //建立畫布 aDC.SetPixel(point, RGB(255, 0, 0)); //將點畫在畫布上 MyDoc *doc = (MyDoc *)GetDocument(); //取得目前Doc物件的指標 doc->AddPoint(point); //將軌跡點加入Doc物件中 } } afx_msg void OnLButtonUp(UINT , CPoint point) { ReleaseCapture(); //解放滑鼠訊息的接收權 } DECLARE_DYNCREATE(MyView) //宣告run-time類別 DECLARE_MESSAGE_MAP() //宣告訊息映射表 }; IMPLEMENT_DYNCREATE(MyView,CView) //宣告MyView為run-time類別 BEGIN_MESSAGE_MAP(MyView,CView) ON_WM_LBUTTONDOWN() ON_WM_MOUSEMOVE() ON_WM_LBUTTONUP() END_MESSAGE_MAP() //建立訊息映射表 class MyFrame : public CFrameWnd { DECLARE_DYNCREATE(MyFrame) //宣告 run-time類別 DECLARE_MESSAGE_MAP() //宣告訊息映射表 }; IMPLEMENT_DYNCREATE(MyFrame,CFrameWnd) //宣告MyFrame為run-time類別 BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd) //建立訊息映射表 END_MESSAGE_MAP() class MyApp : public CWinApp { public: BOOL InitInstance() { CDocument *doc; //宣告指向文件的指標 CSingleDocTemplate* DocTemplate; //宣告指向單文件樣板物件的指標 DocTemplate = new CSingleDocTemplate( //建立具有單文件樣板物件 IDR_MENU1, //用於單文件框架之資源的識別子 RUNTIME_CLASS(MyDoc), //單文字視窗的Document RUNTIME_CLASS(MyFrame),//單文字視窗的視窗框架 RUNTIME_CLASS(MyView)//單文字視窗的View ); AddDocTemplate(DocTemplate); //將單文件樣板物件設定給MyApp doc = DocTemplate->CreateNewDocument(); //建立新的文件 m_pMainWnd = DocTemplate->CreateNewFrame(doc, NULL); //建立一個視窗框架 DocTemplate->InitialUpdateFrame((CFrameWnd*)m_pMainWnd, doc); //起始化視窗框 架物件,並連接View物件 m_pMainWnd->ShowWindow(SW_SHOW); //顯示視窗 return true; } }a_app; //建立應用程式物件 補充說明(Supplement): 程式碼網址:http://ideone.com/jazfJE --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.163.26.51
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1489990239.A.839.html
1F:→ TeaEEE: 你的OnMouseMove呢? 03/20 14:25
2F:→ TeaEEE: aDC建了卻沒畫 03/20 14:27
請問是這段嗎? class MyView裡面 afx_msg void OnMouseMove(UINT , CPoint point) { if (this == GetCapture()) { CClientDC aDC(this); //建立畫布 aDC.SetPixel(point, RGB(255, 0, 0)); //將點畫在畫布上 MyDoc *doc = (MyDoc *)GetDocument(); //取得目前Doc物件的指標 doc->AddPoint(point); //將軌跡點加入Doc物件中 } } 這裡面aDC.SetPixel不是畫圖的意思嗎? ※ 編輯: chingyue (1.163.26.51), 03/20/2017 14:50:59
3F:→ pttworld: OnLButtonDown是否少L 03/20 20:00
對對對 真的是少L 非常謝謝您! ※ 編輯: chingyue (122.116.59.114), 03/21/2017 09:26:35







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP