比如,通过vc++的集成环境,简简单单生成一个窗口框架,并在其中适当的位置显示一句话,诸如此类,一点一点的增加技能,很快的。那本书你要找对。------我记得书名大概是mfc实例100例。
通过vc++的集成环境,简简单单生成一个窗口框架(所有必要的但是不用编写甚至无需关心的代码),他的过程是这样的。
第一步,点击“文件“下的”新建“。
第二步,在工程属性业中点击MFC AppWizard(exe),在右侧填写工程, 路径信息。然后点击确定。
第三步,选择单文档,点击确定。
第五步,直接电机下一步。
第六步,直接电机下一步。
第七步,点击完成。
现在,你可以执行你的第一个窗口程序了。
只实现了大体的时钟外观用MFC 建单文档程序 在生成的CMainFram类中的PreCreateWindow中添加cs.cx=200
cs.cy=290
然后在View类的OnDraw函数中添加如下代码:
const CRect rcBounds(10,10,180,180)
const CRect rcInvalid(10,10,180,180)
pDC->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)))
CPen pen(PS_SOLID,6,RGB(0,122,122))
pDC->SelectObject(&pen)
pDC->Rectangle(rcBounds)
//显示Colock中的3,6,9,12
pDC->TextOut(rcBounds.right/2-8,rcBounds.top+rcBounds.bottom/12,"12")
pDC->TextOut(rcBounds.right/2-4,rcBounds.bottom-rcBounds.bottom/12-17,"6")
pDC->TextOut(rcBounds.left+rcBounds.right/12,rcBounds.bottom/2-4,"9")
pDC->TextOut(rcBounds.right-rcBounds.right/12-8,rcBounds.bottom/2-4,"3")
CTime time = CTime::GetCurrentTime()
int nTime_s = time.GetSecond()
int nTime_m = time.GetMinute()
int nTime_h = time.GetHour()
int nLength_S,nLength_M,nLength_H
if(rcBounds.right <rcBounds.bottom)
{
nLength_S = rcBounds.right/2 - rcBounds.right/7
nLength_M = rcBounds.right/2 - rcBounds.right/6
nLength_H = rcBounds.right/2 - rcBounds.right/5
}
else
{
nLength_S = rcBounds.bottom/2 - rcBounds.bottom/7
nLength_M = rcBounds.bottom/2 - rcBounds.bottom/6
nLength_H = rcBounds.bottom/2 - rcBounds.bottom/5
}
CPoint ptOrigin,ptEndS,ptEndM,ptEndH
//Origin Point
ptOrigin.x = rcBounds.right/2
ptOrigin.y = rcBounds.bottom/2
CPen pen4(PS_SOLID,4,RGB(255,200,40))
pDC->SelectObject(&pen4)
pDC->Rectangle(rcBounds.right/2-1,rcBounds.bottom/2+1,rcBounds.right/2+1,rcBounds.bottom/2-1)
//Second
ptEndS.x = (long)(nLength_S*cos(((nTime_s-15)*360/60)*PI/180) + ptOrigin.x)
ptEndS.y = (long)(nLength_S*sin(((nTime_s-15)*360/60)*PI/180) + ptOrigin.y)
//Minute
ptEndM.x = (long)(nLength_M*cos(((nTime_m-15)*360/60)*PI/180) + ptOrigin.x)
ptEndM.y = (long)(nLength_M*sin(((nTime_m-15)*360/60)*PI/180) + ptOrigin.y)
//Hour
if(nTime_h>=12)
{
ptEndH.x = (long)(nLength_H*cos(( ((nTime_h-12)*5-15+ nTime_m/15 )*360/60)*PI/180) + ptOrigin.x)
ptEndH.y = (long)(nLength_H*sin(( ((nTime_h-12)*5-15+ nTime_m/15 )*360/60)*PI/180) + ptOrigin.y)
}
else
{
ptEndH.x = (long)(nLength_H*cos(( (nTime_h*5-15+ nTime_m/15 )*360/60)*PI/180) + ptOrigin.x)
ptEndH.y = (long)(nLength_H*sin(( (nTime_h*5-15+ nTime_m/15 )*360/60)*PI/180) + ptOrigin.y)
}
//Draw
CPen pen1(PS_SOLID,4,RGB(0,0,255))
pDC->SelectObject(&pen1)
pDC->MoveTo(ptOrigin)
pDC->LineTo(ptEndH)
CPen pen2(PS_SOLID,2,RGB(255,0,255))
pDC->SelectObject(&pen2)
pDC->MoveTo(ptOrigin)
pDC->LineTo(ptEndM)
CPen pen3(PS_SOLID,1,RGB(255,0,0))
pDC->SelectObject(&pen3)
pDC->MoveTo(ptOrigin)
pDC->LineTo(ptEndS)
在View类中添加OnInitialUpdate虚函数 设置一定时器
SetTimer(1,400,NULL)
在OnTimer函数中使窗口重绘
Invalidate()
很简单,建好数据库表后,到控制面板--管理工具的数据源中,添加你建数据库驱动,即是设置数据源。命个名字。以便在VC程序中连接这个数据源。就可以用了。在类中声明一个数据库对象。
CDatabase m_database
m_database.Open(_T("数据源名")这样就连接了数据源。
C**Recordset m_recordset//这个记录集是和你表相联的类。关联你会吧,就是在工作区中新建一个类,该类命名为C**Recordset。选择基类CRecordset.向导会d出一个对话框,然后你找到你建表的目录,双击你要关联的表。向导就会自动完成。这个记录集,你完全要可不要动。在程序中直接引用就形了。
m_recordset(&m_database)//记录集关联数据库。
CString csSQL
csSQL=_T("")//字符串初始化
csSQL=_T("select * from **/*表名*/where CHEPAIHAO_ID=%d"),1)
m_recordset.Open(AFX_DB_DEFAULT_TYPE,csSQL)//打开记录集第一行。
if(m_recordset.GetRecordCount()==0)
{
csSQL.Format(_T("insert into **/*表名*/ values(%d,\'%d-%d-%d\')"),m_chepaihao,m_datatime.GetYear(),m_datatime.GetMonth,m_datatime.GetDay())
//其中m_chepaihao是与车牌编辑框相关联的字符串,m_datatime是与日期控件相关联的Time变量。
m_database.ExecuteSQL(csSQL)//
m_database.Close()
}
//这就添加了一行。
当然这是简化的主要 *** 作。你想,如果要添加一行,一般就是在对话框中,按一个按钮,d出令一个对话框,从这个对话框中填上车牌号,和选择日期。然后按确定按钮。即执行上面的代码,添加了一行。
自己多想点。如果会VC难不到你的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)