c语言 实验报告 实验四

更新时间:2024-06-27 16:07:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

广州大学学生实验报告

开课学院及实验室:机械与电气工程学院、计机楼601B 年 月 日

学 院 实验课程名称 实验项目名称 机电学院 年级、专业、班 高级C语言及其应用 实验四:外设的应用 姓名 学号 成绩 指导教师 一、实验目的 1. 掌握键盘的基本编程方法 2. 掌握鼠标的基本编程方法 二、实验原理 三、实验设备 计算机、VC++6.0 四、实验内容与结果 1、接收键盘的按键值, 并打印出来; 若按下的是“Esc”键则退出。 #include void main() { unsigned int key,low,high; while(1); while(kbhit()==0); key=getch(); low=key & 0x00ff; high=(key & 0xff00) >>8; if(low==27) { break; } if(low != 0) { printf(\ }else{ printf(\ } }

2、用鼠标画一条线。

// DrawView.cpp : implementation of the CDrawView class //

#include \#include \

#include \#include \

#ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

///////////////////////////////////////////////////////////////////////////// // CDrawView

IMPLEMENT_DYNCREATE(CDrawView, CView)

BEGIN_MESSAGE_MAP(CDrawView, CView) //{{AFX_MSG_MAP(CDrawView) ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_MOUSEMOVE() //}}AFX_MSG_MAP

// Standard printing commands

ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////// // CDrawView construction/destruction

CDrawView::CDrawView() {

// TODO: add construction code here m_bDraw = FALSE; }

CDrawView::~CDrawView() { }

BOOL CDrawView::PreCreateWindow(CREATESTRUCT& cs) {

// TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs

return CView::PreCreateWindow(cs); }

///////////////////////////////////////////////////////////////////////////// // CDrawView drawing

void CDrawView::OnDraw(CDC* pDC) {

CDrawDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);

// TODO: add draw code for native data here }

///////////////////////////////////////////////////////////////////////////// // CDrawView printing

BOOL CDrawView::OnPreparePrinting(CPrintInfo* pInfo) {

// default preparation

return DoPreparePrinting(pInfo); }

void CDrawView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {

// TODO: add extra initialization before printing }

void CDrawView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {

// TODO: add cleanup after printing }

///////////////////////////////////////////////////////////////////////////// // CDrawView diagnostics

#ifdef _DEBUG

void CDrawView::AssertValid() const {

CView::AssertValid(); }

void CDrawView::Dump(CDumpContext& dc) const {

CView::Dump(dc); }

CDrawDoc* CDrawView::GetDocument() // non-debug version is inline {

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDrawDoc))); return (CDrawDoc*)m_pDocument; }

#endif //_DEBUG

///////////////////////////////////////////////////////////////////////////// // CDrawView message handlers

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) {

// TODO: Add your message handler code here and/or call default m_ptOrigin = point; m_ptOld = point; m_bDraw = TRUE;

CView::OnLButtonDown(nFlags, point); }

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) {

/* // 首先获得窗口的设备描述表 HDC hdc;

hdc = ::GetDC(m_hWnd); //移动到线条的起点

MoveToEx(hdc, m_ptOrigin.x, m_ptOrigin.y, NULL); //画线

LineTo(hdc, point.x, point.y); //释放设备描述表

::ReleaseDC(m_hWnd,hdc); */

/* CDC* pDC = GetDC();

pDC->MoveTo(m_ptOrigin); pDC->LineTo(point); ReleaseDC(pDC);

*/ // CClientDC dc(GetParent());

CWindowDC dc(GetDesktopWindow()); // CWindowDC dc(GetParent()); dc.MoveTo(m_ptOrigin); dc.LineTo(point);

/* CPen pen(PS_DOT,1,RGB(255,0,0)); CClientDC dc(this);

CPen* pOldPen = dc.SelectObject(&pen); dc.MoveTo(m_ptOrigin); dc.LineTo(point);

dc.SelectObject(pOldPen);

*/ /* //创建一个红色画刷

CBrush brush(RGB(255,0,0)); //创建并获得设备描述表 CClientDC dc(this);

//利用红色画刷填充鼠标拖曳过程中形成的矩形区域 dc.FillRect(CRect(m_ptOrigin,point),&brush);

*/ /* //创建位图对象 CBitmap bitmap; //加载位图资源

bitmap.LoadBitmap(IDB_BITMAP1); //创建位图画刷

CBrush brush(&bitmap); //创建并获得设备描述表 CClientDC dc(this);

//利用红色画刷填充鼠标拖曳过程中形成的矩形区域 dc.FillRect(CRect(m_ptOrigin,point),&brush);

*/ //创建并获得设备描述表 /* CClientDC dc(this); //创建一个空画刷

CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

//将空画刷选入设备描述表

CBrush *pOldBrush = dc.SelectObject(pBrush); //绘制一个矩形

dc.Rectangle(CRect(m_ptOrigin,point)); //恢复先前的画刷

dc.SelectObject(pOldBrush); */

m_bDraw = FALSE;

CView::OnLButtonUp(nFlags, point); }

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) {

/* CClientDC dc(this);

dc.SetROP2(R2_MERGENOTPEN);

//创建一个红色的、宽度为1的实线画笔 CPen pen(PS_SOLID, 1, RGB(255,0,0)); //把创建的画笔选入设备描述表

CPen *pOldPen = dc.SelectObject(&pen); if(m_bDraw == TRUE) {

// dc.MoveTo(m_ptOrigin); // dc.LineTo(m_ptOld); dc.MoveTo(m_ptOrigin); dc.LineTo(point); dc.LineTo(m_ptOld); //修改线段的起点

//m_ptOrigin = point; m_ptOld = point; }

//恢复设备描述表

dc.SelectObject(pOldPen); */

CView::OnMouseMove(nFlags, point); }

五、实验分析与总结 这个实验觉得很难,键盘还好,但是由于书本上所用的bioskey()是要用VT做的,而我用的是VC,所以出现了错误。后来多方查找资料,才知道bioskey()用vc做不了,则改成了使用getch0,和kbhit()来做,但是它们的使用方法和bioskey不同,要自己查找。 而第二道题用鼠标划线,则是太复杂了,自己编程基本上编译不出来,最后我上网查找了许多资料,问了老师,再参考了一下老师的程序才算是做了出来。 说明:各学院(实验中心)可根据实验课程的具体需要和要求自行设计和确定实验报告的内容要求和栏目,但表头格式按照“实验项目名称”栏以上部分统一。

本文来源:https://www.bwwdw.com/article/a383.html

Top