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/cn.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灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP