MFC实训:吹泡泡程序,基于对话框的应用,链接时出现问题
老师让做一个MFC实训,题目是吹泡泡程序,基于对话框的应用,我在网上找到了代码,但链接时出现了问题。以下是我从网上找的做这个实训的步骤:用AppWizard建立一个基于对...
老师让做一个MFC实训,题目是吹泡泡程序,基于对话框的应用,我在网上找到了代码,但链接时出现了问题。以下是我从网上找的做这个实训的步骤:
用AppWizard建立一个基于对话框的应用程序框架(参看15.4:“用AppWizard生成基于对话框的应用程序”),所有设置均使用缺省值。
使用对话框模板编辑器编辑作为主界面窗口的对话框模板,将其上的静态文本控件和“Cancel”按钮删除,将“OK”按钮的Caption设置为“完成”,并将对话框大小调整为400×300左右。
为对话框模板添加一个Picture控件,将其Type设置为Frame,Color设置为Black,并设置Sunken属性(在Styles选项卡中)。调整其位置为(7,7),大小为287×287。这个框中即为自定义的吹泡泡客户区,所有的吹泡泡活动均在该区域中进行。
为对话框模板添加一个按钮,将其ID改为IDC_COLOR,Caption改为“颜色设置”。
使用ClassWizard为对话框类添加一个鼠标左键消息响应函数OnLButtonDown()和一个按钮命令消息响应函数OnColor()。
程序:
在对话框类的头文件前面添加一行:
#define MAX_BUBBLE 250
并在对话框类定义中添加存放泡泡的几何参数和颜色的数组数据成员:
CRect m_rectBubble[MAX_BUBBLE];
COLORREF m_colorBubble[MAX_BUBBLE];
int m_nBubbleCount;
以及一个存放自定义客户区矩形的数据成员和一个存放当前泡泡颜色设置的数据成员:
CRect m_rectClient;
COLORREF m_colorCurrent;
修改对话框类的OnInitDialog()成员函数,添加计算自定义客户区位置和大小的代码,并将泡泡的数目初始化为0:
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CStatic *pST = (CStatic *)GetDlgItem(IDC_CLIENT);
pST->GetWindowRect(&m_rectClient);
ScreenToClient(&m_rectClient);
m_nBubbleCount = 0;
return TRUE;
}
修改OnPaint()成员函数,添加画出泡泡的有关代码:
void CMyDlg::OnPaint()
{
CPaintDC dc(this);
CRgn rgn;
rgn.CreateRectRgnIndirect(&m_rectClient); // 生成一个区域对象
dc.SelectClipRgn(&rgn); // 选择区域
dc.Rectangle(m_rectClient); // 将客户区背景设置
CBrush brushNew, *pbrushOld; // 白色
for(int i=0; i<m_nBubbleCount; i++)
{
brushNew.CreateSolidBrush(m_colorBubble[i]);
pbrushOld = dc.SelectObject(&brushNew);
dc.Ellipse(m_rectBubble[i]);
dc.SelectObject(pbrushOld);
brushNew.DeleteObject();
}
}
修改由ClassWizard生成的鼠标左键消息响应函数OnLButtonDown(),添加吹泡泡的有关代码:
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
if(m_nBubbleCount<MAX_BUBBLE)
{
int r = rand()%50+10;
CRect rect(point.x-r, point.y-r, point.x+r, point.y+r);
m_rectBubble[m_nBubbleCount] = rect;
m_colorBubble[m_nBubbleCount] = m_colorCurrent;
m_nBubbleCount++;
InvalidateRect(rect, FALSE);
}
}
最后修改由ClassWizard生成的按钮消息响应函数OnColor(),添加调用颜色设置公用对话框的代码:
void CMyDlg::OnColor()
{
m_colorCurrent = RGB(200, 200, 200);
CColorDialog dlg(m_colorCurrent);
if(dlg.DoModal() == IDOK)
m_colorCurrent = dlg.GetColor();
}
希望大家能帮帮我,明天就要交了。
如果能解决了,我会追加分的!
编译时,出现以下问题:C:\Program Files\Microsoft Visual Studio\MyProjects\paopao\paopaoDlg.cpp(99) : error C2065: 'IDC_CLIENT' : undeclared identifier
IDC_CLIENT是出现在OnInitDialog()函数的定义当中。
我把Picture控件已经改成了:IDC_CLIENT,程序能运行了,但是在程序中不能用鼠标点击出现泡泡。希望大家能帮帮忙。自己亲自动手最好不过了。
在线等。。。 展开
用AppWizard建立一个基于对话框的应用程序框架(参看15.4:“用AppWizard生成基于对话框的应用程序”),所有设置均使用缺省值。
使用对话框模板编辑器编辑作为主界面窗口的对话框模板,将其上的静态文本控件和“Cancel”按钮删除,将“OK”按钮的Caption设置为“完成”,并将对话框大小调整为400×300左右。
为对话框模板添加一个Picture控件,将其Type设置为Frame,Color设置为Black,并设置Sunken属性(在Styles选项卡中)。调整其位置为(7,7),大小为287×287。这个框中即为自定义的吹泡泡客户区,所有的吹泡泡活动均在该区域中进行。
为对话框模板添加一个按钮,将其ID改为IDC_COLOR,Caption改为“颜色设置”。
使用ClassWizard为对话框类添加一个鼠标左键消息响应函数OnLButtonDown()和一个按钮命令消息响应函数OnColor()。
程序:
在对话框类的头文件前面添加一行:
#define MAX_BUBBLE 250
并在对话框类定义中添加存放泡泡的几何参数和颜色的数组数据成员:
CRect m_rectBubble[MAX_BUBBLE];
COLORREF m_colorBubble[MAX_BUBBLE];
int m_nBubbleCount;
以及一个存放自定义客户区矩形的数据成员和一个存放当前泡泡颜色设置的数据成员:
CRect m_rectClient;
COLORREF m_colorCurrent;
修改对话框类的OnInitDialog()成员函数,添加计算自定义客户区位置和大小的代码,并将泡泡的数目初始化为0:
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CStatic *pST = (CStatic *)GetDlgItem(IDC_CLIENT);
pST->GetWindowRect(&m_rectClient);
ScreenToClient(&m_rectClient);
m_nBubbleCount = 0;
return TRUE;
}
修改OnPaint()成员函数,添加画出泡泡的有关代码:
void CMyDlg::OnPaint()
{
CPaintDC dc(this);
CRgn rgn;
rgn.CreateRectRgnIndirect(&m_rectClient); // 生成一个区域对象
dc.SelectClipRgn(&rgn); // 选择区域
dc.Rectangle(m_rectClient); // 将客户区背景设置
CBrush brushNew, *pbrushOld; // 白色
for(int i=0; i<m_nBubbleCount; i++)
{
brushNew.CreateSolidBrush(m_colorBubble[i]);
pbrushOld = dc.SelectObject(&brushNew);
dc.Ellipse(m_rectBubble[i]);
dc.SelectObject(pbrushOld);
brushNew.DeleteObject();
}
}
修改由ClassWizard生成的鼠标左键消息响应函数OnLButtonDown(),添加吹泡泡的有关代码:
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
if(m_nBubbleCount<MAX_BUBBLE)
{
int r = rand()%50+10;
CRect rect(point.x-r, point.y-r, point.x+r, point.y+r);
m_rectBubble[m_nBubbleCount] = rect;
m_colorBubble[m_nBubbleCount] = m_colorCurrent;
m_nBubbleCount++;
InvalidateRect(rect, FALSE);
}
}
最后修改由ClassWizard生成的按钮消息响应函数OnColor(),添加调用颜色设置公用对话框的代码:
void CMyDlg::OnColor()
{
m_colorCurrent = RGB(200, 200, 200);
CColorDialog dlg(m_colorCurrent);
if(dlg.DoModal() == IDOK)
m_colorCurrent = dlg.GetColor();
}
希望大家能帮帮我,明天就要交了。
如果能解决了,我会追加分的!
编译时,出现以下问题:C:\Program Files\Microsoft Visual Studio\MyProjects\paopao\paopaoDlg.cpp(99) : error C2065: 'IDC_CLIENT' : undeclared identifier
IDC_CLIENT是出现在OnInitDialog()函数的定义当中。
我把Picture控件已经改成了:IDC_CLIENT,程序能运行了,但是在程序中不能用鼠标点击出现泡泡。希望大家能帮帮忙。自己亲自动手最好不过了。
在线等。。。 展开
2个回答
展开全部
把链接时出的错误提示发上来吧
你这样谁看得懂,看得很烦的,把链接时出的错误提示发上来吧,一下子就能看出到底是什么问题
CDialog::OnInitDialog();
CStatic *pST = (CStatic *)GetDlgItem(IDC_CLIENT);
哈哈,很简单的一个问题呀,你界面的控件里根本没有定义这样的一个ID号(如果你直接在界面拖放的控件,就需要重新定义一下ID号),如果你是用Creat出来的话,你应该添加一个这样的ID资源,然后在Creat的时候使用它,如果你还不明白,你可以查查百度,因为这问题很简单,很常见,可能我面说得太复杂,你反而不明白
你这样谁看得懂,看得很烦的,把链接时出的错误提示发上来吧,一下子就能看出到底是什么问题
CDialog::OnInitDialog();
CStatic *pST = (CStatic *)GetDlgItem(IDC_CLIENT);
哈哈,很简单的一个问题呀,你界面的控件里根本没有定义这样的一个ID号(如果你直接在界面拖放的控件,就需要重新定义一下ID号),如果你是用Creat出来的话,你应该添加一个这样的ID资源,然后在Creat的时候使用它,如果你还不明白,你可以查查百度,因为这问题很简单,很常见,可能我面说得太复杂,你反而不明白
展开全部
没兴趣看你的代码,直接把编译时出的错误提示发上来吧
IDC_CLIENT
说的很清楚啊,你这个东西根本没初始化过,编译器不认识呗。怀疑IDC_CLIENT是在一个名字空间里面定义的,你没用using这个名字空间,也没用在前面加上名字空间名
顺便提示下,你最好快点,编译都没通过,后面还有链接错误呢,今天看来你要通宵了哈哈
程序运行时出错就要用设断点的方法调试了,建议你在显示泡泡那个函数的起始位置设断点,看看点鼠标后有没有调用这个函数。如果没有就看看你响应鼠标输入这个函数,功能是否正常
如果已经调用了,就看看这个函数执行是否正常,按F10,F11跟踪下去
IDC_CLIENT
说的很清楚啊,你这个东西根本没初始化过,编译器不认识呗。怀疑IDC_CLIENT是在一个名字空间里面定义的,你没用using这个名字空间,也没用在前面加上名字空间名
顺便提示下,你最好快点,编译都没通过,后面还有链接错误呢,今天看来你要通宵了哈哈
程序运行时出错就要用设断点的方法调试了,建议你在显示泡泡那个函数的起始位置设断点,看看点鼠标后有没有调用这个函数。如果没有就看看你响应鼠标输入这个函数,功能是否正常
如果已经调用了,就看看这个函数执行是否正常,按F10,F11跟踪下去
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询