当前位置:文档之家› 《Windows程序设计》

《Windows程序设计》

《Windows程序设计》
《Windows程序设计》

《Windows程序设计》实验教学大纲

实验学时:32学时实验个数:11 实验学分: 1

课程性质:(必做)适用专业:计算机科学与技术、软件工程、网络工程

教材及参考书:《Visual C++面向对象与可视化程序设计教程》(第三版)

大纲执笔人:冯朝胜大纲审定人:郭涛

一、实验课的性质与任务

本课程实验大纲是面向计算机相关专业学生开设的《Windows程序设计》(以VC++为开发环境)实验课计划指导大纲,是依据《Windows程序设计》课程教学计划指导大纲编制。本课程主要讲述了利用Windows API函数和MFC进行简单的Windows程序开发的基本流程,结合该课程教学计划大纲的相应内容,设计了10个单项实验和综合实验,力求提高学生的动手能力,做到理论和实践相结合。使学生在实验过程中掌握Windows程序设计的思想、原理,能使用SDK和MFC实现基于窗口的程序设计。

二、实验课程目的与要求

1.实验目的:

Windows程序设计实验课的开设,是为了使学生更好地理解和掌握运用VC开发环境开发Windows程序设计的基本理论、基本方法和基本技术,强化程序设计能力。

2.实验要求:

1)在实验中,要求学生个人独立思考,设计算法流程,编写出程序,完成上机调试,

最后给出实验报告。

2)本课程的学习过程是复杂程序设计的训练过程,要求学生编写的程序结构清楚、

正确易读,符合软件工程的规范;

a)3) 在实验中更好地理解和掌握VC程序设计这门课程中所学的基本理论和方法,

强化程序设计能力。

四、实验内容安排:

实验一Visual C++6.0开发环境实验

(验证性实验2学时)

1、目的要求:

了解Visual C++6.0的特点,熟悉Visual C++6.0的开发环境。

2、实验内容:

了解和熟悉开发环境,对各种菜单功能,工程文件管理和MSDN帮助功能有完整的了解。

3、主要仪器设备及药品

Windows 2000+VC 6.0+MSDN

实验二Windows应用程序基本框架实验

(验证性实验2学时)

1、目的要求:

编写第一个Windows程序,理解入口函数Winmain和窗口函数WinProc,掌握消息驱动机制。

2、实验内容:

使用Win32 Application模板建立一个Win32工程,编写一个包含WinMain, WinProc的基本Windows程序,并编译、运行,观察结果。

#include "stdafx.h"

#include "resource.h"

#define MAX_LOADSTRING 100

// Global Variables:

HINSTANCE hInst; // current instance

TCHAR szTitle[MAX_LOADSTRING]; // The title bar text TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text

// Foward declarations of functions included in this code module:

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK W ndProc(HWND, UINT, WPARAM, LPARAM);

LRESULT CALLBACK A bout(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

// TODO: Place code here.

MSG msg;

HACCEL hAccelTable;

// Initialize global strings

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

LoadString(hInstance, IDC_SDK, szWindowClass, MAX_LOADSTRING);

MyRegisterClass(hInstance);

// Perform application initialization:

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_SDK);

// Main message loop:

while (GetMessage(&msg, NULL, 0, 0))

{

if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

return msg.wParam;

}

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = (WNDPROC)WndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_SDK);

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName = (LPCSTR)IDC_SDK;

wcex.lpszClassName = szWindowClass;

wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

return RegisterClassEx(&wcex);

}

//

// FUNCTION: InitInstance(HANDLE, int)

//

// PURPOSE: Saves instance handle and creates main window

//

// COMMENTS:

//

// In this function, we save the instance handle in a global variable and

// create and display the main program window.

//

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)

{

return FALSE;

}

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

return TRUE;

}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

int wmId, wmEvent;

PAINTSTRUCT ps;

HDC hdc;

TCHAR szHello[MAX_LOADSTRING];

LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

switch (message)

{

case WM_COMMAND:

wmId = LOWORD(wParam);

wmEvent = HIWORD(wParam);

// Parse the menu selections:

switch (wmId)

{

case IDM_ABOUT:

DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);

break;

case IDM_EXIT:

DestroyWindow(hWnd);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

break;

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

RECT rt;

GetClientRect(hWnd, &rt);

DrawText(hdc,"你好", strlen("你好"), &rt, DT_CENTER);

EndPaint(hWnd, &ps);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;

}

// Mesage handler for about box.

LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

switch (message)

{

case WM_INITDIALOG:

return TRUE;

case WM_COMMAND:

if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

{

EndDialog(hDlg, LOWORD(wParam));

return TRUE;

}

break;

}

return FALSE;

}

3、主要仪器设备及药品

Windows 2000+VC 6.0+MSDN

实验三Windows绘图试验

(验证性实验4学时)

1、目的要求:

理解DC概念,掌握坐标映射的设置方法,熟悉Windows绘图的基本方法和函数。2、实验内容:

运用Windows提供的GDI函数,完成窗口图形输出功能。

1)将窗口划分为5个区域,并用白色到黑色线性变化的颜色填充这5个区域,画一条斜线穿过这5个区域;

#include

#include

#include

#include

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)

{

HWND hwnd;

MSG Msg;

WNDCLASS wndclass;

char lpszClassName[]="qwer";

char lpszTitle[]="My_Drawing";

wndclass.style=0;

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=lpszClassName;

if(!RegisterClass(&wndclass))

{

MessageBeep(0);

return FALSE;

}

hwnd=CreateWindow(lpszClassName,lpszTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFA ULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NU LL);

ShowWindow(hwnd,nCmdShow);

UpdateWindow(hwnd);

while(GetMessage(&Msg,NULL,0,0))

{

TranslateMessage(&Msg);

DispatchMessage(&Msg);

}

return Msg.wParam;

}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)

{

HDC hdc;

PAINTSTRUCT ps;

HPEN hP;

HBRUSH hB;

switch(message)

{

case WM_PAINT:

hdc=BeginPaint(hwnd,&ps);

SetMapMode(hdc,MM_TEXT);

hB=(HBRUSH)GetStockObject(WHITE_BRUSH);

SelectObject(hdc,hB);

Rectangle(hdc,0,0,100,400);

hB=(HBRUSH)GetStockObject(LTGRAY_BRUSH);

SelectObject(hdc,hB);

Rectangle(hdc,100,0,200,400);

hB=(HBRUSH)GetStockObject(GRAY_BRUSH);

SelectObject(hdc,hB);

Rectangle(hdc,200,0,300,400);

hB=(HBRUSH)GetStockObject(DKGRAY_BRUSH);

SelectObject(hdc,hB);

Rectangle(hdc,300,0,400,400);

hB=(HBRUSH)GetStockObject(BLACK_BRUSH);

SelectObject(hdc,hB);

Rectangle(hdc,400,0,500,400);

hP=CreatePen(PS_SOLID,50,RGB(255,255,255));

SelectObject(hdc,hP);

MoveToEx(hdc,450,300,NULL);

LineTo(hdc,50,150);

EndPaint(hwnd,&ps);

DeleteObject(hP);

DeleteObject(hB);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hwnd,message,wParam,lParam);

}

return 0;

}

2)编写一个程序,在屏幕上出现一个圆心沿正弦曲线轨迹移动的实心圆,而且,每隔四分之一周期,圆的填充色和圆的周边颜色都发生变化,同时,圆的半径在四分之一周期之内由正弦曲线幅值的0.2倍至0.6倍线性增长。

#include

#include

#include

#include

#define Pi 3.1415926

long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);

double dfTheta=0,dfRange=100.0;

long i=0,j=0;

long lCentreX=0,lCentreY=0,lRadious=(long)(0.2*dfRange);

POINT lpSin[100];

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)

{

HWND hwnd

MSG Message

WNDCLASS wndclass

wndclass.cbClsExtra=0;

wndclass.cbWndExtra=0;

wndclass.hInstance=hInstance;

wndclass.hCursor=LoadCursor(NULL,IDC_ARROW)

wndclass.lpszMenuName=NULL; //

wndclass.lpszClassName="SIN"

wndclass.hIcon=LoadIcon(NULL,IDI_APPLICA

TION); //窗口的最小化图标为缺省图标

wndclass.lpfnWndProc=WndProc; //定义窗口处理函数

wndclass.style=0;

if(!RegisterClass( &wndclass)) //如果注册失败则发出警告

{ MessageBeep(0)

return FALSE

} //---------------- 创建窗口-------------------

hwnd=CreateWindow(

"SIN",

"qwer",

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,

0,

CW_USEDEFAULT,

0,

NULL,

NULL,

hInstance, //创建此窗口的应用程序的当前句柄

NULL

); //---显示窗口

ShowWindow( hwnd, nCmdShow) //-------------- 绘制用户区

UpdateWindow(hwnd);

for(int j=0;j<100;j++) //生成正弦曲线的点坐标

{

lpSin[j].x=(long)(j*2*Pi/100*60);

lpSin[j].y=(long)(dfRange*sin(j*2*Pi/100));

}

while( GetMessage(&Message, 0, 0, 0))

{

TranslateMessage( &Message)

DispatchMessage( &Message)

}

return Message.wParam; //消息循环结束即程序终止时将信息返回系统

}

long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam) {

HDC hDC;

//定义指向设备的句柄

HBRUSH hBrush; //定义指向画刷的句柄

HPEN hPen; //定义指向画笔的句柄

PAINTSTRUCT PtStr;//定义指向包含绘图信息的结构体变量

switch(iMessage) //处理消息

{

case WM_PAINT: //处理绘图消息

hDC=BeginPaint(hWnd,&PtStr);

SetWindowOrgEx(hDC,-200,-200,NULL); //设置映像模式

hPen=CreatePen(PS_DASH,1,RGB(255,0,0)); //黑色画笔

SelectObject(hDC,hPen); //选择画笔

Polyline(hDC,lpSin,100);

if(i<=25) //第一个1/4周期

{

hPen=CreatePen(PS_DASH,1,RGB(255,0,0));

hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0)); lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径}

else if(i<=50)

{

hPen=CreatePen(PS_DASH,1,RGB(0,255,0));

hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(0,255,0)); lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径}

else if(i<=75)

{

hPen=CreatePen(PS_DASH,1,RGB(0,0,255));

hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(0,0,255)); lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径}

else

{

hPen=CreatePen(PS_DASH,1,RGB(255,255,0));

hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,255,0)); lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径}

SelectObject(hDC,hBrush);

//选择画刷

SelectObject(hDC,hPen);

lCentreX=lpSin[i].x;//圆心x坐标

lCentreY=lpSin[i].y; //圆心y坐标

Ellipse(hDC,lCentreX-lRadious,lCentreY-lRadious,

lCentreX+lRadious,lCentreY+lRadious); //画圆

i++;

DeleteObject(hPen); //删除画笔

DeleteObject(hBrush); //删除画刷

EndPaint(hWnd,&PtStr); //删除设备环境指针

Sleep(100); //停0.1秒

if(i<100) InvalidateRect(hWnd,NULL,1);

//刷新用户区

return 0;

case WM_DESTROY:

//关闭窗口

PostQuitMessage(0);

return 0;

default:

return(DefWindowProc(hWnd,iMessage,wParam,lParam));

}

}

3、主要仪器设备及药品

Windows 2000+VC 6.0+MSDN

实验四文本的输出方法与字体设置

(验证性实验2学时)

1、目的要求:

理解字体句柄的念,熟悉Windows文字输出的基本方法和函数,学习字体格式的控制。

2、实验内容:(选做1个)

1)在窗口中显示出26个英文字母,从左向右字母依次位置提高10个像素单位,并且颜色变为红色,然后回到正常位置;当到达最右端后改变方向从右向左依次变成红色并位置提高10个像素单位。在窗口的第二行显示26个字母,字体从正常到斜体,颜色从黑色到天蓝色不断变换。

#include

#include

#include

#include

int a=0;

//函数提前声明

BOOL InitWindowsClass(HINSTANCE hInstance);

BOOL InitWindows(HINSTANCE hInstance, int nCmdShow);

long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam);

BOOL InitWindowsClass(HINSTANCE hInstance) //初始化窗口类

{

WNDCLASS WndClass;

WndClass.cbClsExtra = 0;

WndClass.cbWndExtra = 0;

WndClass.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);

WndClass.hCursor = ::LoadCursor(NULL, IDC_ARROW);

WndClass.hIcon = ::LoadIcon(NULL, "END");

WndClass.hInstance = hInstance;

WndClass.lpszClassName = "WinFill";

WndClass.lpfnWndProc = WndProc;

WndClass.lpszMenuName = NULL;

WndClass.style = CS_HREDRAW | CS_VREDRAW;

return (::RegisterClass(&WndClass));

}

//

BOOL InitWindows(HINSTANCE hInstance, int nCmdShow) //初始化窗口

{

HWND hWnd;

hWnd = ::CreateWindow("WinFill","填充实例程序",

WS_OVERLAPPEDWINDOW, //窗口类型

250,150,450,450,NULL,NULL,hInstance,NULL);

if (!hWnd)

{

return FALSE;

}

::ShowWindow(hWnd, nCmdShow);

::UpdateWindow(hWnd);

return TRUE;

}

long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)

{

HDC hdc; //设置环境句柄

char str[]="abcdefghijklmnopqrstuvwxyz";

int i=0;

static n;

PAINTSTRUCT ps;

TEXTMETRIC tm;

int L Y=50; //初始坐标

HFONT hF_black,hF_blue; //字体句柄

switch(iMessage) {

case WM_CREATE:

SetTimer(hWnd,1,300,NULL);

break;

case WM_PAINT:

hdc=BeginPaint(hWnd,&ps);

GetTextMetrics(hdc,&tm); //获取默认句柄,写入tm结构中

for(i=0;i<26;i++)

{

int y=L Y; //L Y

if(i==n)

{

if(a==0)

y=L Y-30;

else y=L Y+30;

SetTextColor(hdc,RGB(255,0,0)); //设置单个的颜色为红

}

TextOut(hdc,2*i*tm.tmAveCharWidth,y,&str[i],1);//依次为字符串起始坐标,所显示的字符串,输出的字节数

SetTextColor(hdc,RGB(0,0,0)); // 设置整排的颜色为黑

}

if (n%2==0) //当时钟为偶数时显示黑色字体

{

hF_black=CreateFont( 30, //字体的高度

0,0,0,

FW_NORMAL, //字体的粗度

0, //定义斜体

0,0,

GB2312_CHARSET,

OUT_DEFAULT_PRECIS,

CLIP_DEFAULT_PRECIS,

DEFAULT_QUALITY,

DEFAULT_PITCH,

"正常");

SelectObject(hdc,hF_black);

GetTextMetrics(hdc,&tm);

for (i=0;i<26;i++)

{

SetTextColor(hdc,RGB(0,0,0));

TextOut(hdc,(25-i)*tm.tmAveCharWidth,L Y+3*tm.tmHeight+tm.tmInternalLeading,&s tr[25-i],1);

}

}

else

{

hF_blue=CreateFont( 20, //字体的高度

0,

0,

0,

FW_HEA VY, //字体的粗度

1, //定义斜体

0,

0,

GB2312_CHARSET,

OUT_DEFAULT_PRECIS,

CLIP_DEFAULT_PRECIS,

DEFAULT_QUALITY,

DEFAULT_PITCH,

"粗体字");

SelectObject(hdc,hF_blue);

GetTextMetrics(hdc,&tm);

for (i=0;i<26;i++)

{

SetTextColor(hdc,RGB(0,0,255));

TextOut(hdc,(25-i)*tm.tmAveCharWidth,L Y+3*tm.tmHeight+tm.tmInternalLeading,&str[25 -i],1);

}

}

EndPaint(hWnd,&ps);

break;

case WM_TIMER:

n++;

if (n==26)

n=0;

RECT rc;

GetClientRect(hWnd,&rc); //获取当前窗口可用区

InvalidateRect(hWnd,&rc,true); //对该区域进行刷新

UpdateWindow(hWnd);

break;

case WM_KEYDOWN:

{

switch(wParam)

{

case VK_UP: //减速

a=0;

InvalidateRect(hWnd,&rc,true);

break;

case VK_DOWN: //加速

a=1;

InvalidateRect(hWnd,&rc,true);

break;

}

}

return 0;

case WM_DESTROY:

KillTimer(hWnd,1); //删除计时器

PostQuitMessage(0);

default:

return DefWindowProc(hWnd,iMessage,wParam,lParam);

}

return 0;

}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{

MSG Message;

if (!InitWindowsClass(hInstance))

{

return FALSE;

}

if (!InitWindows(hInstance, nCmdShow))

{

return FALSE;

}

while (::GetMessage(&Message, 0, 0, 0))

{

::TranslateMessage(&Message);

::DispatchMessage(&Message);

}

return Message.wParam;

}

2)编写一个程序,在窗口中显示“VC中显示字体与背景”,字体颜色为红色,背景色为黄色,字体为宋体,字高40。

3、主要仪器设备及药品

Windows 2000+VC 6.0+MSDN

实验五键盘消息的响应实验

(验证性实验2学时)

1、目的要求:

理解Windows程序响应键盘操作的原理,熟悉键盘消息的响应编程。

2、实验内容:(选做1个)

1)设计一个窗口,在该窗口中练习键盘的响应,要求如下:单击键盘上的向上箭头时,窗口中显示“You had hitted the up key”;单击键时,窗口中显示“You had hitted the SHIFT key”;单击键时,窗口中显示“You had hitted the CTRL key”;单击键时,窗口中显示“You had hitted the CTRL A key”;单击键时,窗口中显示“You had hitted the SHIFT B key”。

long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)

{HDC hDC; //定义设备环境句柄.

PAINTSTRUCT ps; //定义包含绘图信息的结构体变量

HPEN hPen; //定义画笔句柄。

HBRUSH hBrush; //定义画刷句柄

//以下定义输出的字符串。

static char cUp[]="You had hitted the UP key";

static char cCtrl[]="You had hitted the Ctrl key";

static char cShift[]="You had hitted the SHIFT key";

static char cCtrl_A[]="You had hitted the CTRL A key";

static char cShift_B[]="You had hitted the SHIFT B key";

//下面定义并初始化按键标志变量。

static BOOL nUpKeyDown=FALSE,

nShiftKeyDown=FALSE,

nCtrlKeyDown=FALSE,

nCtrlAKeyDown=FALSE,

nShiftBKeyDown=FALSE;

switch(iMessage)

{ case WM_KEYDOWN:

{ switch(wParam)

{ case VK_UP: //当按上箭头键时,变量置为真。

nUpKeyDown = TRUE; break;

case VK_SHIFT: //当按shift键时,变量置为真。

nShiftKeyDown = TRUE; break;

case VK_CONTROL: //当按control键时,变量置为真

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程序设计题(含简答题答案)

《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程序设计》模拟题 一.单项选择题 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程序设计题

《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程序设计复习资料(完整答案)

一、单项选择题: 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程序设计(第五版)源代码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程序设计模拟题

《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程序设计

一单项选择题 试题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分状态:已答常见的菜单类型不包括【】。 自动菜单

大连海事大学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/5f11723538.html,ing System; using System.Collections.Generic; using https://www.doczj.com/doc/5f11723538.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) {

windows程序设计 显示一个弹跳的小球(源代码)

首先新建一个Win32项目,注意,不是控制台项目。 新建一个源文件,将下面的代码复制进去,编译运行即可看见一个跳动的小球。 #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 ("Bounce") ; 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 ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow ( szAppName, TEXT ("Bouncing Ball"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ;

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程序设计

1.能间接调用视图类的OnDraw函数的是【 A 】 OnTimer LButtonDown Serialize Invalidate 2.类CButton不是下列【 D 】控件对应的类。 命令按钮 单选按钮 复选框 静态文本框 3.使用【 B 】函数获取的设备上下文在退出时必须调用ReleaseDC释放。 GetWindowsDC GetDC GetDesktopDC GetClientDC 4.设置编辑框控件的文本内容,可使用函数【 A 】 SetWindowText SetSel ReplaceSel GetWindowText 5.列表框的类型不包括【】下拉式列表框、简单组合框和下拉式组合框 Simple 简单的 Dropdown 下拉菜单 Drop List 下拉列表 Scroll 滚动 6.下面【C 】不是GDI对象。 CFont CPalette CClientDC CBitmap

7.要使鼠标箭头在按钮上暂停时能显示工具栏按钮提示,必须设置工具栏的风格为【 A 】 CBRS_TOOLTIPS CBRS_FLYBY CBRS_NOALIGN WS_VISIBLE 8.下列【 C 】不是MFC消息映射机制有关的宏。 DECLARE_MESSAGE_MAP BEGIN_MESSAGE_MAP DECLARE_SERIAL END_MESSAGE_MAP 9.希望菜单前出现一个对勾,应该用CCmdUI类的【B 】成员函数。 Enable SetRadio SetCheck SetText 10.能间接调用视图类的OnDraw函数的是【A 】 OnTimer LButtonDown Serialize Invalidate 11.更新菜单状态的消息是【C 】。 COMMAND UPDATE UPDATE_COMMAND_UI INVALIDATE 12菜单项助记符前用【B】引导。 % & # $ 13.Windows标准控件的属性设置通常由三个选项卡构成,不包括( A ) Color General Style Extend Styles

Windows程序设计实验指导书(完整)

《Windows程序设计》实验指导书 2009-3-1

目录 实验一:VC++6.0开发环境熟悉 (1) 实验二:API对话框应用程序设计 (3) 实验三:API菜单使用 (6) 实验四、API绘图程序 (12) 实验五、MFC程序设计 (17) 实验六:MFC对话框程序设计:计算器 (19) 实验七:MFC文档(SDI)应用:绘图程序 (21) 综合性设计实验 (22)

实验一:VC++6.0开发环境熟悉 一、实验目的 熟悉Visual C++ 6.0开发环境,掌握VC6中建立、维护、运行工程项目的方法,掌握VC6中调试的方法。 二、实验内容 熟悉Visual C++ 6.0开发环境,如AppWizard、ClassWizard、工具栏、编译、运行普通的C++应用程序等,并能编写一个简单C++应用程序。熟悉调试过程。 三、实验要求 1、按下图建立一个C++程序,实现菜单选择,可以实现两个整数的加减。 要求: [1]、建立工程; [2]、程序调试通过; [3]、菜单和功能用一个类来实现。 2、制作一个简单的公司职员的管理程序,这个程序要求涉及到类、结构、函数的基本使用。同时,这个程序涉及到了对Visual Stuido集成开发环境的使用,有关这方面的详细内容,请参阅本书的第二单元“Visual C++编程基础”。 [1]、新建项目。 使用Visual C++的应用程序向导生成一个控制台应用程序Demo。项目类型选择“Win32Console Application”,在向导的第一步中将程序类型设置成“A"Hello, World!" application”。 [2]、添加职员信息类。 在集成开发环境的中选择Insert|New Class菜单进入添加类的对话框,将新增的类名设置成workmate。之后,分别修改workmate类的定义及实现文件。 [3]、使用职员信息类。 四、思考题

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