当前位置:文档之家› windows程序设计

windows程序设计

windows程序设计
windows程序设计

消息驱动运行中发生的各种事件(鼠标键盘输入,各种状态的改变等),以消息的形式通知Windows系统Windows系统接收消息,提交给发生事件的应用程序应用程序的窗口处理函数负责处理响应收到的消息处理完成后继续等待下一个消息API application programming Interface SDK software Development kit 事件是用户对计算机操作的动作或程序中某个对象的状态发生的变化,每个事件对应一个消息,即每个事件发生的效果是产生消息消息是描述事件发生的信息事件驱动程序执行的顺序不是事先规定的,而是由事件的发生来控制在程序执行过程中,当某个对象的状态发生变化,或有外部输入等情况发生,则产生相应的事件当事件产生时,系统会发出特定的消息编写程序时可以对这些消息做出反应,也可以不做出;若要做出反应(即响应消息),则把响应此消息的程序写在与此消息相关联的函数中在程序执行时,一旦产生了一个消息,会调用与此消息相关联的函数窗口是Windows应用程序基本的操作单位,是应用程序与用户之间交互的接口,也是系统管理应用程序的基本单位消息传输事件发生,产生消息消息保存到消息队列分配给应用程序消息队列消息循环提取消息窗口函数响应消息MFC Microsoft foundation class MFC应用程序框架提供了一般应用程序需要的全部面向对象软件组件的集成集合MFC程序结构基于框架窗口的应用程序(早期的MFC)程序运行管理、窗口及数据管理分开两部分,与SDK程序类似基于文档/视图的应用程序单文档应用程序(重点)程序运行管理、窗口管理、交互管理、数据管理分开基于对话框的应用程序程序运行管理、对话框管理分开目前的MFC应用程序都采用文档/视图结构,把原来窗口框架类的工作分开窗口框架类管理窗框视图类(即视窗类)管理数据显示、接收用户输入文档类负责数据管理文档视图架构的思想数据嵌入文档中,利用文档的架构管理文档与视图通信,使数据在视图中显示视图显示数据,并与用户交互视图放入窗口中文档模板类对象管理上述对象协调工作CDocument是负责管理数据的类应用程序中的文档类是这个类的派生类作用数据管理程序员应将用户的实际数据对象内嵌在自己的文档类中需要与自己的视图类通信在程序中实现CDocument的派生类,以便嵌入数据对象,并改写成员函数实现对数据的处理用于派生应用程序的视图类CView 作用处理与用户的交互显示文档类中的数据接收用户输入(例如鼠标操作)通常要改写视图类的成员函数OnDraw或OnPrint,实现数据显示框架自动调用OnDraw函数WM_PAINT消息OnPaint()OnDraw() 菜单及响应利用菜单编辑器修改IDR_MAINFRAME 菜单资源在相应的类中为新菜单项映射消息COMMAND单击或用快捷键选中时生产UPDATE_COMMAND_UI上一级菜单显示前生产用于控制菜单状态编写新菜单项的消息处理函数快捷键在菜单项标题后面加“(&字母)”菜单动态为要添加的菜单项定义一个宏(例如ID_MENU1)用CWnd::GetMenu( )获得指向菜单条的指针(如果在子菜单上添加,应用CMenu::GetSubMenu()获得该菜单的指针)为菜单项手工映射消息处理函数在适当的地方调用InsertMenu或AppendMenu添加菜单项调用CWnd::DrawMenuBar()函数重画菜单动态删除菜单项与上面类似(使用DeleteMenu函数)动态创建菜单项用函数BOOL CreateMenu( );获得新菜单句柄,再用此句柄当作AppendMenu函数的第2个参数(需进行(UTIN)强制类型转换)通常用于创建弹出式菜单的顶级(不需映射消息)快捷菜单建立菜单如果菜单已经存在,且功能齐全,只需确定弹出方式即可也可以另加一个菜单资源,此法可使菜单条中不显示快捷菜单关联类(对于新加菜单)把此菜单资源关联到视图类上选中此菜单资源的情况下打开类向导,选视图类影射消息并编写消息处理函数选择弹出方式可在视图类的WM_CONTEXTMENU消息(鼠标右键单击客户区时产生)处理函数中弹出Windows系统有一个存放消息的队列每个应用程序也有一个消息队列Windows系统先将收到的消息存放在系统队列中,然后再分发到相应的应用程序队列中应用程序则从自身的队列中获取消息并进行处理类的消息响应一个类要响应多种消息对于每一种消息最重要的是知道是哪个消息:消息的标识(ID 身份证)这个消息对应的响应函数是什么(函数的起始地址)解决的办法建立一个结构体数组(消息映射表)一行(一个数组元素)是一个消息的信息每行至少包含消息的标识(ID)指向响应函数的指针消息的响应当收到消息后,根据消息ID在表中查找,找到后调用对应的消息处理函数消息路由当一个类收到消息后,先在自己的消息映射表中搜索,搜索到就执行相应的消息处理函数,然后结束消息处理过程未搜到,则到上一层基类中搜索,依此类推如果都未搜到,则交给系统默认的窗口处理函数去处理消息种类窗口消息命令消息控件通知消息实现消息映射消息映射的要点为每个要响应的消息建立一个处理函数为每个能够响应消息的类建立一个结构类型的数组(消息映射表)并填写这个数组编写每个消息处

理函数的代码声明消息处理函数

afx_msg void 函数名( ); //有些有返回值或参数(特别是窗口消息)

对于窗口消息格式:ON_消息ID( )

对于命令消息格式:ON_COMMAND(产生消息对象的ID,函数名)

对于控件通知消息格式:ON_通知码(控件ID,函数名)

在类的实现文件中为每个消息处理函数编写代码

用户自定义消息何时用

当程序运行到某个节点,需要发出一个消息

要做的事:需要有一个消息标示(ID)需要一个消息处理函数

把消息ID和消息处理函数填写到类的消息映射表中为消息处理函数编写代码

在需要发出消息的程序代码处发出该消息不能使用类向导

用户自定义消息方法

定义一个消息ID(宏)声明消息处理函数

在类的声明文件中(.h文件)afx_msg void OnMyMessage( ); 说明:根据需要决定是否有返回值、参数填写消息映射表编写消息响应函数

在类的程序文件中(.cpp文件)

void CMyMsgView::OnMyMessage( ) {……}

在需要发出消息的地方用CWnd ::SendMessage发出消息

Message ——消息ID

也可用CWnd ::PostMessage函数(参数相同,返回值类型:BOOL)

区别将消息放置在消息队列的末尾,不等待窗口处理该消息就直接返回

SendMessage():发送消息,且一直等待窗口处理完该消息之后才返回

对话框

对话框是一种资源,使用时要用一个CDialog类的派生类与它相关联

CDialog类是CWnd类的派生类,所以对话框是一个窗口

CDialog类封装了对话框常用操作的功能函数对话框是窗口的集合,上面放置各种控件

控件所对应的类是CWnd类的派生类控件是对话框窗口的子窗口

种类

模式对话框对话框弹出后,只能进行对话框操作,不能进行其他窗口的操作,直到本对话框被关闭无模式对话框对话框弹出后,可以进行其他窗口的操作(可以与其他窗口切换操作)

模式对话框创建

用对话框编辑器设计对话框(包括上面的控件)

为对话框关联一个类(利用类向导)

在相应打开对话框的类里面声明一个对话框类对象

调用对话框对象的DoModal()成员函数来创建对话框,关闭对话框后对话框对象自动销毁CMyDlg dlg; dlg.DoModal( );

可以根据DoModal()函数的返回值判断对话框关闭方式

IDOK 表示按“确定”按钮(ID是IDOK)关闭IDCANCEL表示按“取消”按钮(ID是IDCANCEL )关闭CPasswordDlg dlg; if(dlg.DoModal( )==IDOK){ if(dlg.m_Password == "123456")......Else }

非模式对话框创建、

用Create函数创建

调用ShowWindow函数显示对话框

CMyDlg *pDlg; //声明对话框类指pDlg=new CMyDlg ; //动态创建对象

pDlg->Create(对话框ID, this); //创建对话pDlg->ShowWindow(SW_SHOW); //显示对话框

…//其他操作

delete pDlg; //释放内存空间(对话框销毁)

创建基于对话框的应用程序:

用AppWizard创建应用程序用对话框编辑器设计界面(添加控件)用ClassWizard使控件与对象的关联用ClassWizard进行消息映射

控件控件是对话框上或窗口上的子窗口每一类控件有自己的类,控件是该类对象

所有控件都是窗口,所有控件类都由CWnd类派生使用对话框编辑器可以很方便地添加和删除控件

控件产生“控件通知消息”,由它们的父类(承载窗口,例如对话框类)接收

控件通知消息的处理函数是其父类的成员函数

访问控件数据把控件当作窗口处理

使用GetDlgItem(控件ID)获得指向控件的指针用GetWindowText获得该控件中的文本

用SetWindowText设置该控件中的文本

本方法不需要为控件关联变量

对于有标题的控件(3种按钮、分组框等)处理的是标题

对于编辑框、组合框、静态文本处理的是框中的文本

CWnd *pEdit1=GetDlgItem(IDC_EDIT1);

CString str;

pEdit1->GetWindowText(str);

pEdit1->SetWindowText("");

pEdit2->SetWindowText(str);

文档视图结构中类之间的访问

应用程序类(由CWinApp派生)

封装了初始化、创建窗口、消息循环等功能

可以在虚函数InitInstance( )中添加程序代码

窗口框架类CMainFrame(由CFrameWnd派生)

负责标题栏、菜单、工具栏、状态栏的管理

文档类(由CDocument派生)

负责组织、管理数据

视图类(由CView派生)

负责与用户交互,显示文档类管理的数据

用GetDocument( )返回文档类的指针

通常在OnDrow( )函数中显示数据

获得应用程序类对象地址

在程序的任何地方,可以使用函数AfxGetApp()返回本程序的应用程序类对象的地址

CWinApp* AfxGetApp( ); CWinApp是应用程序类的基类

获得主框架类对象地址

CWinApp类由CWinThread类派生CWinThread类有一个成员变量CWnd * m_pMainWnd

指向应用程序线程主窗口对象

对于基于文档视图的程序,指向主框架窗口

对于基于对话框的程序,指向对话框窗口

你的应用程序类继承了m_pMainWnd

利用m_pMainWnd可以可以获得主框架窗口(或对话框窗口)对象的地址

注意m_pMainWnd是CWnd类指针,应把它强制转换为你的主框架类指针(或对话框类指针)

CMainFrame *m_p=(CMainFrame*)AfxGetApp()->m_pMainWnd;

视图类中可以调用CWnd类函数获得其父框架类对象地址

CFrameWnd* CWnd:: GetParentFrame( )

在主框架类中获得视图类对象的地址

对于SDI程序调用函数:CView *CFrameWnd::GetActiveView( )

返回当前视图类对象的地址(应进行强制类型转换)若无当先视图,返回NULL

对于MDI程序主框架窗口中无视图每个子框架窗口中才有视图

要先找到当前框架窗口

CMDIChildWnd* CMDIFrameWnd:: MDIGetActive( BOOL*pbMaximized = NULL ) const;

或CFrameWnd* CFrameWnd::GetActiveFrame()

再获得它的当前视图CView *CFrameWnd::GetActiveView( )

在视图类中

获得文档类对象的地址CDocument* CView::GetDocument( )

获得其父框架类对象地址CFrameWnd* CWnd:: GetParentFrame( )

在文档类中获得视图对象的地址

先获得视图列表中第一个课件视图的位置

使用文档类函数用返回的位置信息(POSITION 类型)获得该视图对象的地址使用文档类函数

返回rPosition 所表示的视图的地址rPosition 变为下一个视图的位置,无下一视图rPosition为NULL POSITION pos = GetFirstViewPosition();

while (pos != NULL) { CView* pView = GetNextView(pos); pView->UpdateWindow(); }

文档与视图的相互作用

在文档类中,当数据发生变化,要通知所有视图进行更新,用函数

void UpdateAllViews( …); //参数见MSDN

当CDocument::UpdateAllViews函数被调用时,会自动调用视图类函数:

virtual void CView::OnUpdate(…); //参数见MSDN

当应用程序启动时,或用户选择“新建”或“打开”菜单项时会自动调用视图类函数:

virtual void CView::OnInitialUpdate( );

可重载此函数初始化视图,以便适应新文档的需要

当用户选择“新建”菜单项时,框架将先构造一个文档对象,然后调用文档类函数:

virtual BOOL CDocument::OnNewDocument( ); 通常,用此函数设置文档数据程艳的初始值

GDI(Graphics Device Interface)

是Windows操作系统的重要部分,提供了绘图的基本工具,如画点、线、多边形、位图、文本输出等,负责Windows环境下的图形输出和图形模式下的文本输出

DC(Device Context)

为实现设备无关性,应用程序一般不直接向物理设备输出,而是面向一个虚拟逻辑设备,即DC

DC是Windows 定义的一个数据结构,包含了向设备输出时所需要的绘图属性

使用GDI函数之前,必须先创建一个DC

设备环境类CDC

MFC 对DC进行了封装,即CDC类

CDC的基类是CObject 封装了GDI的所有绘图函数

可利用CDC类对象在显示器和非显示设备(如打印机等)上输出

CDC派生了几种不同的设备环境类

CClientDC窗口客户区(窗口中客户可用部分)设备环境坐标(0,0)一般指客户区左上角

绘图时可先调用CWnd类的GetClientRect()函数获得客户区的大小

CWindowDC整个窗口的设备环境,可以在窗口的任何位置绘图坐标(0,0)指该窗口的左上角

绘图时可先调用CWnd类的GetWindowRect()函数获得窗口在屏幕坐标系中的外边框坐标

CPaintDC可对客户区和非客户区进行操作主要用于响应窗口重绘消息(WM_PAINT)的绘图

DC

在OnDraw函数中绘图void OnDraw(CDC * pDC);

是使用应用程序向导生成SDI、MDI应用程序时视图类的成员函数

由WM_PAINT消息处理函数OnPaint调用可以利用参数pDC 在此函数中绘图

使用OnDraw函数绘图的好处窗口每次重绘,都可显示最新图形

若函数参数中没有CDC参数,则要自己创建CDC对象或指针,并用this对其初始化

CClientDC dc(this); dc.TextOut(20, 20, “输出文字");

若不是在函数所属的类所对应的窗口输出,则应先获得输出窗口的DC,再进行输出

例:在ID为IDC_BUTTON1的按钮的左上角输出“按钮”

CButton * pBtn; pBtn =(CButton *)GetDlgItem(IDC_BUTTON1); CDC *pDC=pBtn->GetDC();

pDC->TextOut(0,0,"按钮"); ReleaseDC(pDC);

视图类的OnDraw 函数

当窗口有任何变化时会产生WM_PAINT消息,它的消息处理函数是OnPaint

OnPaint会调用OnDraw函数

在窗口中画图的代码一般都放在OnDraw函数中(一般不要修改OnPaint函数),以保证在窗口发生变化时,仍然可以显示已经画好的图(即重画一遍)

为在其他函数中也可以画图,一般在该函数中调用CWnd类的Invalidate函数,迫使WM_PAINT消息产生清除void Invalidate( BOOL bErase = TRUE ); 功能:使客户区无效(因此需要更新)

bErase ——更新时是否擦除背景内容

CDC类GDI的绘图工具

GDI提供了很多绘图工具,称为GDI对象(图形对象)

用户申请设备环境绘图时,使用的是默认的绘图工具,若要使用不同的绘图工具绘图,需要重新设置或定义绘图工具

绘图工具与设备环境的关系

绘图工具也称图形对象,有多种,例如画笔、笔刷、字体等等

图形对象决定绘图的效果,DC决定绘图的形状和绘图的位置

每种图形对象有一个“当前”对象,“当前”对象影响对DC的输出结果,要想改变某次绘图的效果,应在这次绘图之前改变相应的“当前”图形对象

MFC把不同的绘图工具封装到不同的类,它们基类都是CObject的子类CGdiObject,而不是CDC

CPen(画笔类)CBrush (笔刷类)CFont(字体类)CBitmap(位图类)

绘图

int color=RGB(red,green,blue);CPen newPen(PS_SOLID,width,color);CPen *oldPen=pDC->SelectObject(&newPen); CDC绘图

CPoint MoveTo( int x, int y ); CPoint MoveTo( POINT point );

功能:把当前位置设置为(x、y)或point 处

返回:原来位置的坐标

获得当前位置CPoint GetCurrentPosition( ) const;

画直线BOOL LineTo( int x, int y );BOOL LineTo( POINT point );

功能:以当前位置为起点,函数参数位置为终点画一条直线,并把终点作为新的当前位置

返回:失败——0,否则为非0

画椭圆BOOL Ellipse( int x1, int y1, int x2, int y2 ); BOOL Ellipse( LPCRECT lpRect );

功能:画椭圆,参数确定椭圆外接矩形的坐标

画矩形BOOL Rectangle( int x1, int y1, int x2, int y2 ); BOOL Rectangle( LPCRECT lpRect );

功能:画矩形,参数确定矩形的坐标

输出文本virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount );

BOOL TextOut( int x, int y, const CString& str ); x、y ——文本起始点坐标

lpszString ——指向文本的字符指针nCount ——文本的字符数str ——存放文本的对象设置、获得文本颜色virtual COLORREF SetTextColor( COLORREF crColor ); 返回:原来的文本色COLORREF GetTextColor( ) const; 返回当前文本色

设置、获得背景色virtual COLORREF SetBkColor( COLORREF crColor ); 返回原来的背景色COLORREF GetBkColor( ) const; 返回当前背景色

设置、获得背景模式int SetBkMode( int nBkMode ); 返回原来的背景模式

nBkMode ——OPAQUE (默认)显示背景TRANSPARENT :背景透明int GetBkMode( ) const;

画折线图

int k; CPoint Origin(100,500); // 设置坐标原点

for(k=0;k<=600;k+=20){ // 画垂直坐标线

pDC->MoveTo(Origin.x+k,Origin.y); pDC->LineTo(Origin.x+k,Origin.y - 400); }

for(k=0;k<=400;k+=20){ // 画水平坐标线

pDC->MoveTo(Origin.x,Origin.y-k); pDC->LineTo(Origin.x+600,Origin.y - k) } CPoint Point(Origin.x,Origin.y - pnbuf[0]); // 1月数据为起点pDC->MoveTo(Point);

CPen pen(PS_SOLID,2,RGB(255,0,0)); pDC->SelectObject(&pen);

for(k=1;k<12;k++){

Point.x+=50;Point.y=Origin.y - pnbuf[k];

pDC->LineTo(Point); // 到下一月数据点画线

pDC->Ellipse( Point.x-3 , Point.y-3, Point.x+3 , Point.y+3 ); // 在数据点画个小圆

修改字体:CFont cf; cf.CreateFontIndirect(&longf); //按参数创建新字体CDC *pDC=m_Show.GetDC();

pDC->SelectObject(&cf); //在设备环境中使用字体

pDC->TextOut(50,10,"在控件上输出文字"); ReleaseDC(pDC);

在OnInitDialog函数中添加代码:

CFont *cf= this->GetFont(); //获得本对话框的默认字体

if ( cf ){ cf->GetLogFont(&m_longf); } // 默认字体信息存入m_longf

m_FontSize=abs(m_longf.lfHeight) ; //设置并显示默认字号UpdateData(false);

组合框消息处理函数添加代码:

// UpdateData();

int nIndex=m_FontName.GetCurSel(); //获得选中项的索引CString strFont;

m_FontName.GetLBText(nIndex,strFont); //获得该索引项的文字内容

strcpy(m_longf.lfFaceName,strFont); //以选中的文字设置字体MySetFont(m_longf);

通用对话框

颜色对话框CColorDialog类字体对话框CFontDialog类文件对话框CFileDialog类

文件对话框:

void CAView::OnLButtonDown(UINT nFlags, CPoint point)

{CClientDC dc(this);CString FilePathName; // 存放文件名和路径CFileDialog dlg(TRUE);if(dlg.DoModal()==IDOK)

FilePathName=dlg.GetPathName();dc.TextOut(20,20,FilePathName);

文件:

打开已有文件和新建文件都要创建一个文件对象(CFile 类对象)使用CFile 类的构造函数 使用CFile 类的Open 函数

对文件进行操作要使用CFile 类的成员函数 Read 、Write 函数按字节长度读写 写字符串时无法与后面的数据区分 读字符串时需指定读入的长度

? 写字符串 读字符串 int n;

int n;

CString cstr(“test”); CString cstr;

char ch[80];

n=cstr.GetLength(); file.Read(&n, sizeof(n)); file.Write(&n, sizeof(n));

file.Read(ch, n); file.Write(cstr, n);

ch[n]='\0'; cstr=ch;

文件指针 void SeekToBegin( ) // 定位到文件头 DWORD SeekToEnd( ) //定位到文件尾,返回文件长度

获得文件相关信息

virtual DWORD GetLength( ) const 返回文件长度 virtual CString GetFileName( ) const 返回文件名 virtual DWORD GetPosition( ) const 返回文件指针位置 MFC 把缓冲区中数据强制写入文件

virtual void Flush( )

MFC 异常类

CException 类 CObject 类的派生类

CException 类的子类(派生出的类) CFileException 类 提供文件输入输出时的异常状态

CArchiveException 类

提供串行化的异常状态

? 异常处理程序分为2部分

? try 语句块 ? catch 语句块

? 用throw 语句“抛出”异常

? throw 表达式

? 抛出异常的语句放在try 块里

? 产生异常后的过程

? 跳出try 块,用throw 后面表达式的类

型依次与catch 中的类型比较 ? 执行类型匹配的catch 块

? 若没有匹配的catch 块,则向上层调用

函数传递异常,直到遇到匹配的catch 块

? 若程序中没有匹配的catch 块,则程序

终止

try{

可能出现异常的语句块 }

catch(异常类型声明1) {

异常处理语句块1 }

catch(异常类型声明2) {

异常处理语句块2 } …

catch(异常类型声明n) {

异常处理语句块n }

void CEx8_1Doc::OnFileSave () {

char *pFileName="test.dat";

CFile file(pFileName,CFile::modeCreate | CFile::modeWrite); try{ file.Write(&m_pos,sizeof(m_pos)); // 写坐标数据个数

file.Write(m_mousePoint,sizeof(m_mousePoint));file.Close();

void CEx8_1Doc::OnFileOpen()

{ char *pFileName="test.dat";

CFile file(pFileName,CFile::modeRead);

try{

file.Read(&m_pos,sizeof(m_pos));

file.Read(m_mousePoint,sizeof(m_mousePoint));file.Close();

}

catch(CFileException *e){

CString estr;estr.Format("错误原因:%d",e->m_cause);

AfxMessageBox(estr);file.Abort(); e->Delete();

}

Windows程序设计题(含简答题答案)

Windows 程序设计》模拟题 单项选择题 1. 在 VC++ 中,项目文件的扩展名是( B )。 A ) exe B)dsp C ) dsw D ) cpp 2. 在 MFC 中,利用 ClassWizard 不能( D )。 A )建立新类 B )进行消息映射 C )增加类的成员变量 D )插入资源 当滑块滑动时,滑块条控件将发送滚动消息来通知父窗口,垂直滑动条发送( 3. C )消 息。 4. 5. A ) WM_CHAR B ) WM_HSCROLL C ) W M_VSC ROLL 更新菜单状态的消息是( C A ) WM_COMMAND )。 C ) UPDATE_COMMAND_UI 对于消息队列描述正确的是( A )在Windows 中只有一个消息系统, 据结构,用于临时存储消息。 D ) WM_CHANG E B ) UPDATE D) INVALIDATE 即系统消息队列。 消息队列是一个系统定义的数 B )系统可从消息队列将信息直接发给窗口。 另外,每个正在 Windows 下运行的应用程 序都有自己的消息队列。 C )系统消息队列中的每个消息最终都要被 USER 模块传送到应用程序的消息队列中去。 应用程序的消息对列中存储了程序的所有窗口的全部消息。 D )以上都正确 6. 在 MFC 中,所有的控件都是( B )类的派生类,都可以作为一个特殊的窗口来处理。 CView B ) CWnd C) 7. 使用 CWindow C) D ) CDialog GetDC () 获取的设备上下文在退出时,必须调用( A )释放设备上下文。 ReleaseDC() B ) delete() DeleteDC () D ) Detach () 8. 希望菜单无效,应该用 CCmdUI 类的( A )成员函数。 A ) Enable B ) SetRadio C ) SetCheck D ) SetText 9.希望菜单前出现一个“V”,应该用 CCmdUI 类的(C )成员函数。 A ) Enable B ) SetRadio C ) SetCheck D ) SetText 10.下面(A )不是MFC 设备环境类CDC 类的派生类。 A ) GDI B ) CPaintDC C) CClientDC D) CWindowDC 11.在MFC 中,所有的文档类都派生于( C ),所有的视图类都派生于( A )。 A) CView B) CWindow C) CDocument D) CFormView

windows程序设计之扫雷游戏经典之作

WIN32模拟WINDOWS XP扫雷 程序 课程设计目的与要求: 本课程设计是计算机科学与技术专业重要的实践性环节之一,是对本程学习后进行的一次全面而综合的练习。本次课程设计的目的与任务主要有: 1.巩固和加深学生对C和C++语言的基本知识的理解与掌握。 2.掌握C和C++语言编程和调试的基本技能 3.运用C和C++语言对程序的简单设计 4.掌握程序设计说明文档的能力与技巧 5.提高与运用C和C++语言解决能实际问题的能力 一、题目描述: 自行分析Windows XP系统自带扫雷游戏,查找规则并对主要功能进行模仿程序实现,对于实现过程中出现的bug进 行调试解决。 二、使用语言: C和C++ 语言 选用C++语言的原因,简而言之主要是因为C++的设计目标,就是要让C++既具有适合于系统程序设计的C语言所具 有的可适应性和高效性,又能在其程序组织结构方面具有像其 他的语言所支持的程序优势。这即是说,C++所提供的抽象机 制能够被应用于那些对效率和可适应性具有极高要求的程序设 计任务之中。

三、编译以及运行环境: 编译环境:Microsoft Visual C++ 6.0 运行环境:Windows XP或其他兼容兼容系统 四、题目分析: 经过对游戏的初步分析,扫雷游戏含有如下规则: 根据输入的信息,执行相应的挖雷,插旗,疑问标记,自动蔓延开挖等。挖雷过程由计时器计时,由一个计数器统计插旗后雷的剩余个数。如果选择了标记功能,那么单机右键会依次对未知点进行插旗,标记,取消插旗与标记。如果点滴到插旗的如果点击到了未插旗子的雷区,如果是雷,则判定游戏失败,之后对雷区的点击进行屏蔽,不予响应。如果是疑问标记则像正常区域对待。如何判断胜利,如果所有的雷都被插旗或者点击后剩余的雷区, 五、程序运行流程简介以及流程图: 点击程序按默认参数进行初始化,输入,表情对鼠标左右键点击进行变化响应,对于雷区内点击进行规律响应,对雷区点击后果进行统计,判断失败与成功,失败或者成功之后,对于雷区内的输入也就是点击进行屏蔽,对菜单游戏级别、重新开始游戏按钮响应。级别选择,重新游戏时时间归零、雷数显示刷新。如此重复规则,直到点击退出。 程序简要流程图:

Windows程序设计题(含简答题答案)

《Windows程序设计》模拟题 一.单项选择题 1、在VC++中,项目文件得扩展名就是(B)。 A)exe????B)dsp C)dsw???D)cpp 2、在MFC中,利用ClassWizard不能(D)。 A)建立新类??B)进行消息映射 C)增加类得成员变量?D)插入资源 3、当滑块滑动时,滑块条控件将发送滚动消息来通知父窗口,垂直滑动条发送(C)消息。 A)WM_CHAR??B)WM_HSCROLL C)W M_VSCROLL???D)WM_CHANGE 4、更新菜单状态得消息就是(C )。 A)WM_MANDB)UPDATE C)UPDATE_MAND_UI D)INVALIDATE 5、对于消息队列描述正确得就是(D) A)在Windows中只有一个消息系统,即系统消息队列。消息队列就是一个系统定义得 数据结构,用于临时存储消息。 B)系统可从消息队列将信息直接发给窗口。另外,每个正在Windows下运行得应用程序都有自己得消息队列。 C)系统消息队列中得每个消息最终都要被USER模块传送到应用程序得消息队列中去。 应用程序得消息对列中存储了程序得所有窗口得全部消息. D)以上都正确 6、在MFC中,所有得控件都就是(B)类得派生类,都可以作为一个特殊得窗口来处理。 A)CView??B)CWnd C)C Window???D)CDialog 7、使用GetDC()获取得设备上下文在退出时,必须调用(A)释放设备上下文. A)ReleaseDC()???B)delete() C)D eleteDC()???D)Detach() 8、希望菜单无效,应该用CCmdUI类得(A )成员函数。 ???B)SetRadio A)Enable?? ? C)SetCheck???D)SetText 9、希望菜单前出现一个“√",应该用CCmdUI类得(C)成员函数. A)Enable ???B)SetRadio C)SetCheck??D)SetText 10、下面(A)不就是MFC设备环境类CDC类得派生类. A)GDI ????B)CPaintDC C)CClientDC ??D)CWindowDC 11、在MFC中,所有得文档类都派生于(C),所有得视图类都派生于(A )。 A)CView B)CWindowC)CDocumentD)CFormView 12、采用C++进行绘图时,(B)用于指定图形得填充样式,(A)用于指定图形得边框样式.

windows程序设计学习笔记(一)

Windows程序设计学习笔记 2015年10月4日 一、宽字符wide-character 1、wchar_t: char的双字节(Unicode) 定义:typedef unsigned short wchar_t 示例:wchar_t c=’A’; wchar_t *pw=L”hello!”; //L(代表long)告诉编译器按宽字符保存,即每个字符占两个字节 wchar_t a[]=L”hello!”; 2、宽字符库函数 wcslen( ):计算宽字串符的长度 如:wchar_t *pw=L”hello!”; iLength=wcslen(pw); //字符串长度是6 二、windows头文件类型 1、CHAR和WCHAR typedef char CHAR; //8位 typedef wchar_t WCHAR; //16位变量前面可加wc以说明是一个宽字符 2、字符串指针 (1)8位字符串指针 tpyedef CHAR *PCHAR, *LPCH, *PCH, *NPSTR, *LPSTR, *PSTR; tpyedef CONST CHAR *LPCCH, *PCCH, *LPCSTR, *PCSTR; 前缀N和L表示“near”和“long”,指的是16位windows中两种大小不同的指针,在Win32中near和long指针没有区别 (2)16位字符串指针 tpyedef WCHAR *PWCHAR, *LPWCH, *PWCH, *NWPSTR, *LPWSTR, *PWSTR; tpyedef CONST WCHAR *LPCWCH, *PCWCH, *LPCWSTR, *PCWSTR; 3、WINAPI 定义:#define WINPAI _stdcall 该语句指定了一个调用约定,包括如何生成机器代码以在堆栈中放置函数调用的参数三、Hello程序 /*------------------------------------- HELLO.C--windows下显示Hello,world! 作者:lw 时间:2015年国庆 -------------------------------------*/ #include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT("HelloWin"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc;

Windows程序设计题(含简答题标准答案)

《Windows程序设计》模拟题 一.单项选择题 1. 在VC++中,项目文件的扩展名是(B)。 A)exe ????B)dsp C)d sw?????D)cpp 2.在MFC中,利用ClassWizard不能(D )。 A)建立新类?????B)进行消息映射 C)增加类的成员变量?D)插入资源 3. 当滑块滑动时,滑块条控件将发送滚动消息来通知父窗口,垂直滑动条发送(C)消息。 A)WM_CHAR ?B)WM_HSCROLL C)WM_VSCROLL???D)WM_CHANGE 4. 更新菜单状态的消息是(C)。 A)WM_COMMANDB)UPDATE C)UPDATE_COMMAND_UI D)INVALIDATE 5.对于消息队列描述正确的是( D ) A)在Windows中只有一个消息系统,即系统消息队列。消息队列是一个系统定义的数据结构,用于临时存储消息。 B)系统可从消息队列将信息直接发给窗口。另外,每个正在Windows下运行的应用程 序都有自己的消息队列。 C)系统消息队列中的每个消息最终都要被USER模块传送到应用程序的消息队列中去。应用程序的消息对列中存储了程序的所有窗口的全部消息。 D)以上都正确 6. 在MFC中,所有的控件都是(B )类的派生类,都可以作为一个特殊的窗口来处理。 ?B)CWnd A)CView ??? C)C Window ???D)CDialog 7.使用GetDC()获取的设备上下文在退出时,必须调用(A)释放设备上下文。 A)ReleaseDC()???B)delete() C)D eleteDC() ?D)Detach() 8. 希望菜单无效,应该用CCmdUI类的(A )成员函数。 A)Enable ???B)SetRadio C)S etCheck ??D)SetText 9. 希望菜单前出现一个“√”,应该用CCmdUI类的(C)成员函数。 A)Enable??B)SetRadio C)SetCheck????D)SetText 10. 下面(A)不是MFC设备环境类CDC类的派生类。 A)GDI??????B)CPaintDC C)C ClientDC ???D)CWindowDC 11. 在MFC中,所有的文档类都派生于(C),所有的视图类都派生于(A )。 A)CViewB)CWindowC)CDocument D)CFormView 12. 采用C++进行绘图时,(B )用于指定图形的填充样式,(A)用于指定图形的边框样式。 A)画笔B)画刷C)区域D)位图

windows程序设计

消息驱动运行中发生的各种事件(鼠标键盘输入,各种状态的改变等),以消息的形式通知Windows系统Windows系统接收消息,提交给发生事件的应用程序应用程序的窗口处理函数负责处理响应收到的消息处理完成后继续等待下一个消息API application programming Interface SDK software Development kit 事件是用户对计算机操作的动作或程序中某个对象的状态发生的变化,每个事件对应一个消息,即每个事件发生的效果是产生消息消息是描述事件发生的信息事件驱动程序执行的顺序不是事先规定的,而是由事件的发生来控制在程序执行过程中,当某个对象的状态发生变化,或有外部输入等情况发生,则产生相应的事件当事件产生时,系统会发出特定的消息编写程序时可以对这些消息做出反应,也可以不做出;若要做出反应(即响应消息),则把响应此消息的程序写在与此消息相关联的函数中在程序执行时,一旦产生了一个消息,会调用与此消息相关联的函数窗口是Windows应用程序基本的操作单位,是应用程序与用户之间交互的接口,也是系统管理应用程序的基本单位消息传输事件发生,产生消息消息保存到消息队列分配给应用程序消息队列消息循环提取消息窗口函数响应消息MFC Microsoft foundation class MFC应用程序框架提供了一般应用程序需要的全部面向对象软件组件的集成集合MFC程序结构基于框架窗口的应用程序(早期的MFC)程序运行管理、窗口及数据管理分开两部分,与SDK程序类似基于文档/视图的应用程序单文档应用程序(重点)程序运行管理、窗口管理、交互管理、数据管理分开基于对话框的应用程序程序运行管理、对话框管理分开目前的MFC应用程序都采用文档/视图结构,把原来窗口框架类的工作分开窗口框架类管理窗框视图类(即视窗类)管理数据显示、接收用户输入文档类负责数据管理文档视图架构的思想数据嵌入文档中,利用文档的架构管理文档与视图通信,使数据在视图中显示视图显示数据,并与用户交互视图放入窗口中文档模板类对象管理上述对象协调工作CDocument是负责管理数据的类应用程序中的文档类是这个类的派生类作用数据管理程序员应将用户的实际数据对象内嵌在自己的文档类中需要与自己的视图类通信在程序中实现CDocument的派生类,以便嵌入数据对象,并改写成员函数实现对数据的处理用于派生应用程序的视图类CView 作用处理与用户的交互显示文档类中的数据接收用户输入(例如鼠标操作)通常要改写视图类的成员函数OnDraw或OnPrint,实现数据显示框架自动调用OnDraw函数WM_PAINT消息OnPaint()OnDraw() 菜单及响应利用菜单编辑器修改IDR_MAINFRAME 菜单资源在相应的类中为新菜单项映射消息COMMAND单击或用快捷键选中时生产UPDATE_COMMAND_UI上一级菜单显示前生产用于控制菜单状态编写新菜单项的消息处理函数快捷键在菜单项标题后面加“(&字母)”菜单动态为要添加的菜单项定义一个宏(例如ID_MENU1)用CWnd::GetMenu( )获得指向菜单条的指针(如果在子菜单上添加,应用CMenu::GetSubMenu()获得该菜单的指针)为菜单项手工映射消息处理函数在适当的地方调用InsertMenu或AppendMenu添加菜单项调用CWnd::DrawMenuBar()函数重画菜单动态删除菜单项与上面类似(使用DeleteMenu函数)动态创建菜单项用函数BOOL CreateMenu( );获得新菜单句柄,再用此句柄当作AppendMenu函数的第2个参数(需进行(UTIN)强制类型转换)通常用于创建弹出式菜单的顶级(不需映射消息)快捷菜单建立菜单如果菜单已经存在,且功能齐全,只需确定弹出方式即可也可以另加一个菜单资源,此法可使菜单条中不显示快捷菜单关联类(对于新加菜单)把此菜单资源关联到视图类上选中此菜单资源的情况下打开类向导,选视图类影射消息并编写消息处理函数选择弹出方式可在视图类的WM_CONTEXTMENU消息(鼠标右键单击客户区时产生)处理函数中弹出Windows系统有一个存放消息的队列每个应用程序也有一个消息队列Windows系统先将收到的消息存放在系统队列中,然后再分发到相应的应用程序队列中应用程序则从自身的队列中获取消息并进行处理类的消息响应一个类要响应多种消息对于每一种消息最重要的是知道是哪个消息:消息的标识(ID 身份证)这个消息对应的响应函数是什么(函数的起始地址)解决的办法建立一个结构体数组(消息映射表)一行(一个数组元素)是一个消息的信息每行至少包含消息的标识(ID)指向响应函数的指针消息的响应当收到消息后,根据消息ID在表中查找,找到后调用对应的消息处理函数消息路由当一个类收到消息后,先在自己的消息映射表中搜索,搜索到就执行相应的消息处理函数,然后结束消息处理过程未搜到,则到上一层基类中搜索,依此类推如果都未搜到,则交给系统默认的窗口处理函数去处理消息种类窗口消息命令消息控件通知消息实现消息映射消息映射的要点为每个要响应的消息建立一个处理函数为每个能够响应消息的类建立一个结构类型的数组(消息映射表)并填写这个数组编写每个消息处

Windows程序设计复习资料(完整答案)

一、单项选择题: 1.WinMain()函数的工作。 WinMain()函数是Windows程序的入口点 在WinMain中进行:注册窗体类、建立窗体、显示窗体、更新窗体、建立消息循环2.非MFC的Windows程序中,不是处理WM_PAINT消息的时候怎样获得客户区的设备环境句柄。 BeginPaint ----------EndPaint GetDC---------------ReleaseDC(成对出现) 利用GetDC()函数获取设备环境句柄 3.句柄的含义。 句柄是一个(通常为32位的)无符号整数(unsigned int),它代表一个内核对象内核对象在应用层的表示 4.在MM_TEXT映射模式下,什么情况下客户坐标和逻辑坐标可能不同。 当窗口客户区有滚动条时客户坐标和逻辑坐标可能不同 5.Windows程序的控制流程。 Windows程序没有固定的控制流程,事件驱动程序控制流程 6.事件驱动、消息驱动的概念。 事件驱动程序设计是一种全新的程序设计方法,它不是由事件的顺序来控制,而是由事件的发生来控制,而这种事件的发生是随机的、不确定的,并没有预定的顺序,这样就允许程序的的用户用各种合理的顺序来安排程序的流程。 消息是事件到达Windows内部后的称呼 7.对话框、控件的作用。 对话框是程序与用户之间进行交互,接收用户输入、并把数据显示出来的一个窗口; 控件是用户可与之交互以输入或操作数据的对象。控件通常出现在对话框中或工具栏上。 8.MFC中怎样处理WM_PAINT消息。 在OnDraw()函数中处理该消息 9.GetMessage()函数在什么情况下返回0,从而导致消息循环终止,程序结束。 在接收到WM_QUIT消息时返回0 10.Windows中,应用程序的输出是怎样进行的。 通过设备描述表DC(Device Context)来进行应用程序与物理设备之间的交互11.MFC中,大多数类的基类都是什么。 CObject类 12.一个MFC应用程序必须有且只能有一个从哪个类派生的全局应用程序对象,此对象在运行时刻控制应用程序中所有其他对象的活动。 CWinApp类 13.每次当窗口客户区需要重新绘制时,应用程序框架怎么处理。 发送WM_PAINT消息,调用OnDraw()函数进行重绘 14.CDC类的作用。 CDC是设备描述表类的基类,除了一般的窗口显示外,还用于基于桌面的全屏幕绘制和非屏幕显示的打印机输出。 15.当程序中某个函数改变了数据而需要重新绘制客户区时,OnDraw()函数不会被自动调

Windows程序设计题

《Windows程序设计》模拟题 一.单项选择题 1. 在VC++中,项目文件的扩展名是(B)。 A)exe B)dsp C)dsw D)cpp 2. 在MFC中,利用ClassWizard不能(D)。 A)建立新类B)进行消息映射 C)增加类的成员变量D)插入资源 3. 当滑块滑动时,滑块条控件将发送滚动消息来通知父窗口,垂直滑动条发送(C)消息。 A)WM_CHAR B)WM_HSCROLL C)WM_VSCROLL D)WM_CHANGE 4. 更新菜单状态的消息是( C )。 A)WM_COMMAND B)UPDATE C)UPDATE_COMMAND_UI D)INVALIDATE 5. 对于消息队列描述正确的是( D ) A)在Windows中只有一个消息系统,即系统消息队列。消息队列是一个系统定义的数据结构,用于临时存储消息。 B)系统可从消息队列将信息直接发给窗口。另外,每个正在Windows下运行的应用程序都有自己的消息队列。 C)系统消息队列中的每个消息最终都要被USER模块传送到应用程序的消息队列中去。 应用程序的消息对列中存储了程序的所有窗口的全部消息。 D)以上都正确 6. 在MFC中,所有的控件都是(B)类的派生类,都可以作为一个特殊的窗口来处理。 A)CView B)CWnd C)CWindow D)CDialog 7. 使用GetDC()获取的设备上下文在退出时,必须调用(A)释放设备上下文。 A)ReleaseDC() B)delete() C)DeleteDC() D)Detach() 8. 希望菜单无效,应该用CCmdUI类的(A)成员函数。 A)Enable B)SetRadio C)SetCheck D)SetText 9. 希望菜单前出现一个“√”,应该用CCmdUI类的(C)成员函数。 A)Enable B)SetRadio C)SetCheck D)SetText 10. 下面(A)不是MFC设备环境类CDC类的派生类。 A)GDI B)CPaintDC C)CClientDC D)CWindowDC 11. 在MFC中,所有的文档类都派生于(C),所有的视图类都派生于(A)。 A)CView B)CWindow C)CDocument D)CFormView 12. 采用C++进行绘图时,(B)用于指定图形的填充样式,(A)用于指定图形的边框样式。

Windows编程基础-期末考试试卷头期末-A卷答案

北华航天工业学院2013—2014学年第二学期 Windows编程基础课程考试卷(A、B) 考核形式:开卷闭卷班级:姓名:学号: 一、填空题(每空1分,共10分) 1. 用户可以通过项目工作区窗口的ResourceView 视图来查看资源。 2. 一个单文档的MFC 应用程序框架一般包括5个类:应用程序类、框架窗口类、 视图类、文档类和文档模板类。 3. 改变菜单项文本是使用CCmdUI 类的SetText 成员函数。 4. 滚动条类CScrollBar的成员函数规定了滚动条的操作。设置滚动条的范围使用SetRange 函数,设置滚动块的位置使用SetScrollPos 函数,获取滚动块的当前位置使用GetScrollPos 函数。 5. 对话框默认标识符前缀是IDD 。 二、选择题(每空2分,共40分) 1.MFC类库中的类按层次关系可知,CStatic的直接父类为(B )。 A、CObject B、CWnd C、CCmdTarget D、CFrameWnd 2. 以下控件中,( C )没有Caption属性。 A、按钮 B、群组框 C、编辑控件 D、静态控件 3. 列表框ClistBox类的成员函数( A )用来向列表框增加列表项,成员函数( C )用来清除列表项所有项目,成员函数( F )用来返回列表框的列表项的总数。 A、AddString B、DeleteString C、ResetContent D、FindString E、GetCurSel F、GetCount 4. 假定AB为一个类,则执行“”AB a(4),b(3),*p[2];”语句时,自动调用该类构造函数的次数为( A )。 A、2 B、3 C、4 D、5 5.在类外定义类的成员函数时,应当使用( B )来标识该函数为特定类的成员。A、:B、::C、-> D、this

Windows程序设计(第五版)源代码A(chap08)

chap08-Beeper1 /*----------------------------------------- BEEPER1.C -- Timer Demo Program No. 1 (c) Charles Petzold, 1998 -----------------------------------------*/ #include #define ID_TIMER 1 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("Beeper1") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("Program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, TEXT ("Beeper1 Timer Demo"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ;

Windows程序设计

一单项选择题 试题1 满分值:4.0分状态:已答 应用程序可以使用GDI创建3种类型的图形输出,不包括【】位图 矢量图形 光栅图形 文本 [我的答案] 光栅图形 试题2 满分值:4.0分状态:已答 关于工具栏、菜单和加速键的关系,正确的说法是【】 工具按钮与菜单必须一一对应 工具栏与加速键一一对应 工具按钮不必与菜单一一对应 菜单与加速键一一对应 [我的答案] 工具按钮不必与菜单一一对应 试题3 满分值:4.0分状态:已答 【】函数用于在指定位置输出字符串: Print TextOut Scanf

[我的答案] Print 试题4 满分值:4.0分状态:已答 下列【】不是MFC消息映射机制有关的宏: DECLARE_MESSAGE_MAP BEGIN_MESSAGE_MAP DECLARE_SERIAL END_MESSAGE_MAP [我的答案] DECLARE_SERIAL 试题5 满分值:4.0分状态:已答 在视图类中获得文档类对象指针用函数【】: GetDocument UpdateAllViews OnUpdate SetModifiedFlag [我的答案] GetDocument 试题6 满分值:4.0分状态:已答 能间接调用视图类的OnDraw函数的是【】OnTimer LButtonDown

Invalidate [我的答案] Invalidate 试题7 满分值:4.0分状态:已答实心画刷只需要定义【】 填充样式 填充颜色 填充模式 填充图案 [我的答案] 填充颜色 试题8 满分值:4.0分状态:已答【】设置进度条的当前位置SetRange SetStep SetPos StepIt [我的答案] SetPos 试题9 满分值:4.0分状态:已答常见的菜单类型不包括【】。 自动菜单

《windows程序设计(C语言版)》第1章~开始

开始涛儿软件工作室整理编译 本书介绍了在Microsoft Windows 98、Microsoft Windows NT 4.0和Windows NT 5.0下程序写作的方法。这些程序用C语言编写并使用原始的Windows Application Programming Interface(API)。如在本章稍后所讨论的,这不是写作Windows程序的唯一方法。然而,无论最终您使用什么方式写作程序,了解Windows API都是非常重要的。 正如您可能知道的,Windows 98已成为使用Intel 32位微处理器(例如486和Pentium)的IBM兼容型个人计算机环境上最新的图形操作系统之代表。Windows NT是IBM PC兼容机种以及一些RISC(精简指令集计算机)工作站上使用的Windows工业增强型版本。 使用本书有三个先决条件。首先,您应该从使用者的角度熟悉Windows 98。不要期望可以在不了解Windows使用者接口的情形下开发其应用程序。因此,我建议您在开发程序(或在进行其它工作)时使用执行Windows的机器来跑Windows应用程序。 第二,您应了解C语言。如果要写Windows程序,一开始却不想了解C语言,那不是一个好主意。我建议您在文字控制台环境中,例如在Windows 98 MS-DOS命令提示窗口下提供的环境中学习C语言。Windows程序设计有时包括一些非文字模式程序设计的C语言部分;在这些情况下,我将针对这些问题提供讨论。但大多数情况下,您应非常熟悉该语言,特别是C语言的结构和指针。了解标准C语言执行期链接库的一些相关知识是有帮助的,但不是必要的。 第三,您应该在机器上安装一个适于进行Windows程序设计的32位C语言编译器和开发环境。在本书中,假定您正在使用Microsoft Visual C++ 6.0,该软件包可独立购买,也可作为Visual Studio 6.0软件包的一部分购买。 到此为止,我将不再假设您具有任何图形使用者接口(如Windows)的程序写作经验。 WINDOWS环境 Windows几乎不需要介绍。然而人们很容易忘记Windows给办公室和家庭桌上型计算机所带来的重大改变。Windows在其早期曾经走过一段坎坷的道路,征服桌上型计算机市场的前途一度相当渺茫。 Windows简史

Windows程序设计模拟题

《Windows程序设计》模拟题(补) 一.单项选择题 1、项目文件的扩展名是【1】。 A)exe B)dsp C)dsw D)cpp 2、利用ClassWizard不能【2】。 A)建立新类B)进行消息映射 C)增加类的成员变量D)插入资源 3、下列【3】不是MFC消息映射机制有关的宏。 A)DECLARE_MESSAGE_MAP B)BEGIN_MESSAGE_MAP C)DECLARE_SERIAL D)END_MESSAGE_MAP 4、要使鼠标箭头在按钮上暂停时能显示工具栏按钮提示,必须设置工具栏的风格为【4】。 A)CBRS_TOOLTIPS B)CBRS_FLYBY C)CBRS_NOALIGN D)WS_VISIBLE 5、下面【5】不是GDI对象。 A)CFont B)CPalette C)CClientDC D)CBitmap 6、要将模式对话框在屏幕上显示需要用到【6】。 A)Create B)DoModal C)OnOK D)构造函数 7、类CButton不是下列【7】控件对应的类。 A)命令按钮B)单选按钮 C)复选框D)静态文本框 8、根据对话框的行为性质,对话框可以分为两类【8】 A)对话框资源和对话框类B)模式对话框和非模式对话框 C)对话框资源和对话框模板D)消息对话框和模式对话框 9、所有的控件都是【9】类的派生类,都可以作为一个特殊的窗口来处理。 A)CView B)CWnd C)CWindow D)CDialog 10、使用GetDC()获取的设备上下文在退出时,必须调用【10】释放设备上下文。 A)ReleaseDC() B)delete C)DeleteDC() D)Detach() 11、希望菜单无效,应该用CCmdUI类的【11】成员函数。 A)Enable B)SetRadio C)SetCheck D)SetText 12、当滑块滑动时,滑块条控件将发送滚动消息来通知父窗口,水平滑动条发送【12】消息。 A)WM_CHAR B)WM_HSCROLL C)WM_VSCROLL D)WM_CHANGE

Windows程序设计知识点

《Windows程序设计》课程各章知识点 第一章 1.什么是API、SDK(P2)? 2.用Windows API开发应用程序有什么缺点?(P2) 3.什么是句柄?常用的句柄类型有哪些?(P2) 4.Windows系统的基本数据类型和结构类型(P3) 5.事件、消息(用MSG结构体表示)(P4) 6.消息队列、消息循环(P5) 7.从消息队列获取消息的Windows API函数是? 8.队列消息、非队列消息(P5) 9.Windows应用程序的基本结构(WinMain函数和窗口函数) 10.WinMain函数的主要工作 ●定义窗口类型(WNDCLASS结构体) ●注册窗口类型(RegisterClass函数) ●创建窗口(CreateWindow函数) ●显示窗口(ShowWindow函数、UpdateWindow函数) ●执行消息循环(GetMessage、TranslateMessage函数、DispatchMessage函数) 11.问题:DefWndProc函数的作用(P9) 第二章 1.消息映射、消息映射表(结构体数组)。 2.消息映射表的声明和实现方法(宏命令)? 第三章 1.MFC的设计思想(P51开始部分)? 2.构成Windows应用程序(MFC)框架的主要类有哪些? ●CWinApp类、CDocument类、CView类、CFrameWnd类、CDocTemplate类 ●上述类的基类和派生类:CObject类、CCmdTarget类、CWnd类、CWinThread类、 CSingleDocTemplate类、CMultiDocTemplate类 3.理解应用程序类的InitInstance函数的代码(P65) 4.应用程序创建各种对象的顺序(结合P65代码参考图3-11) 5.应用程序各对象之间的关系(图3-13、图3-14、图3-15) 6.类信息表的声明和实现方法(宏命令) 7.类信息表的提取(宏命令) 第四章 1.虚拟图形显示设备和图形设备描述环境(DC)。 2.什么是GDI?常用GDI绘图工具有哪些? 3.CDC类的派生类有哪些?它们之间的区别是什么? 4.OnDraw函数的作用是什么?什么时候被谁调用? 5.掌握用CPen类和CBrush类绘制常用图形。 第五章

windows程序设计实验报告

《Windows程序设计》 实验报告 实验室: S306(308) 学院:计算机科学与技术 专业:计算机科学与技术

目录 实验一、熟悉visual c++的编程环境 (3) 一、实验目的和要求: (3) 二、实验内容、程序清单及运行结果: (3) 1.编辑第一个C++程序 (3) 2. 用AppWizard建立一个MFC Windows应用 (3) 3. 编写简单的计算程序 (4) 运行结果: (4) 三、心得体会: (4) 实验二、对话框的使用 (5) 一、实验目的和要求: (5) 二、实验内容、程序清单及运行结果 (5) 实验步骤: (5) 实验结果: (7) 三、心得体会: (7) 实验三、创建一个进程来运行一个应用程序 (8) 一、实验要求和目的 (8) 二、实验内容、程序清单及运行结果 (8) 实验步骤: (8) 实验结果: (9) 三、实验心得 (9) 实验四、调整线程优先级 (10) 一、实验要求和目的 (10) 二、实验内容、程序清单及运行结果 (10) 实验步骤: (10) 实验结果: (11) 三、实验心得 (11)

实验一、熟悉visual c++的编程环境 一、实验目的和要求: 1.了解和使用VC集成开发环境 2.熟悉VC环境的基本命令和功能键, 3.熟悉常用的功能菜单命令 4.学习使用VC++环境的帮助 5.学习完整的C++程序开发过程 6.理解简单的C++程序结构 7.了解用Visual C++开发Windows MFC应用程序的过程 二、实验内容、程序清单及运行结果: 1.编辑第一个C++程序 源程序代码: //hello world example #include int main() { cout << "hello!"<< endl ; return 0; //正常返回 } 运行结果: 2. 用AppWizard建立一个MFC Windows应用 在窗口中输出"Hello,World!",修改OnDraw函数的定义,在最后一行加一句:pDC->TextOut(50,50,"Hello, World"); 运行结果:

大连海事大学C语言与Windows程序设计道课后题答案

大连海事大学C语言与Windows程序设计6道课后题答案 1.(1)设计具有以下功能的程序:从键盘上输入10个非负整数,统计并输出最大数和最小数,当输入负数时结束输入。 #include void main() { int a, max=-1, min=32767,num=1; cout<<"Please input a number:"<>a; if(a<0) break; //输入负数结束输入 if(a>max) max =a; if(a=0&&num<=10); if(max>=0) cout<<"Max="<

值在程序运行时从键盘输入。 #include void main() { inti,n,sign=1; float sum=0.0; printf("请输入n:"); scanf("%d",&n); for(i=1;i<=n;i+=2) { sum+=sign*(1.0/i); sign=-sign; } printf("\nsum=%f\n",sum); } 2.设计具有以下功能的程序:从键盘输入10个整数,然后排序。(要求:利用函数调用实现并以数组作为函数的参数) 3.编写几何点(二维平面上)的类Point,包括位置属性(二维坐标x,y), 成员函数包括: 点的位置获取函数GetX()和GetY(),

Windows程序设计学习资料

W i n d o w s程序设计

洛阳理工学院实验报告 系别计算机 与信息 工程系 班级B100505 学号B10050527 姓名张勋 课程名称C#面向对象程序设计实验日期11.22 实验名称Windows程序设计成绩 实验目的: 练习windows窗体的使用,掌握多种控件的属性,学会应用窗体属性和事件以及代码两种方式操作。 实验条件: 微机1台、Visual studio 2008 实验内容与结果: 1.控制TextBox控件,使它只能输入数字。当按下退格键时,执行退格操作.并且当数据 将被清空时,提醒终止删除操作,输入数据。 2.有两个组合框里分别为专业和课程,当专业选定时,课程组合框里的课程数组应属于 该专业,通过增加和删除 按钮可以把所选的课程添 加或删除到列表框,并且 在文本框内显示出列表框 内的所有课程的总学分 数。

当没有选课程直接点击添加按钮时: 选课程并添加: 从列表框内删除: 当再次选择“大学物理”时:

当更换专业时: 3.比较numericUpDown1.UpButton()和 numericUpDown1.Value+=numericUpDown1.Increment;的区别,这里把文本框数值的上限设为20,下限设为0,增值为1. 当达到上限时, numericUpDown1.UpButton()执行 正常,而另一句却出现错误,语句 无法执行 添加快捷菜单,在窗口菜单中有大 中小三个菜单项,分别控制着窗口 的大小,单击右键弹出快捷菜单 使快捷菜单的功能与窗口菜单相 同。 窗口菜单操作下:

快捷菜单操作下: 附加窗体的代码:(部分功能在属性中执行了,故在代码中没有设置) https://www.doczj.com/doc/2b4794409.html,ing System; using System.Collections.Generic; using https://www.doczj.com/doc/2b4794409.html,ponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace p7_4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar >= 48 && e.KeyChar <= 57) ; else if (e.KeyChar == 8) { textBox1.Text.Remove(textBox1.Text.Length - 1); if (textBox1.Text.Length == 1) MessageBox.Show("请输入数据!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error); } else e.Handled = true; } private void Form1_Load(object sender, EventArgs e) {

相关主题
文本预览
相关文档 最新文档