9.25 c++ 总结

2017-09-25  本文已影响0人  张梦涵625

Windows编程基础

总结:

25号开始学习Windows编程基础,MFC编程。Windows和MFS中的字符,和字符串理解的不好,基础概念理解的也不好,下午看录得视频回顾,字符串得背,特别多,今天的重点就是MFC的编程,老师上课给的3个例子和两个作业题,编程理解的还可以,都能做出来。剩余的时间多背背字符串。

基础知识

1.API: 调用的函数集合就是windows操作系统提供给应用程序的编程接口

2.消息和消息队列:

消息机制:操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序

      typedef struct tagMSG

{    HWND hwnd           (窗口句柄)

   UINT message;         (消息的名字)

        WPARAM wParam     (消息的附加参数)

        LPARAM lParam;

       DWORD time;

       POINT pt;             (发送消息的时间和位置)

       } MSG;

3.消息循环的处理过程:

MSG  msg;

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

{   TranslateMessage(&msg);

    DispatchMessage(&msg);

} 

(1) GetMessage()函数不断侦察应用程序的消息队列,若队列为空,则该函数一直运行,不返回;一旦发现队列不为空,便取出一条消息,把它复制到msg结构变量中,同时该函数返回TRUE。

(2) 得到消息msg后,TranslateMessage()把来自键盘的命令翻译成WM_XXX消息命令形式。

(3) DispatchMessage()函数通知Windows把每个消息分发给相应的窗口函数。应用程序并不直接调用窗口函数,而由Windows根据消息去调用窗口函数,因此,窗口函数经常被称为回调函数。

4.句柄

句柄就是资源的标识,我们要索引这样一个资源,就需要通过句柄去索引它。

5.编写WinMain函数

Windows程序的入口 函数,WinMain函数头内容:

int WINAPI WinMain

                   (

              HINSTANCE    hInstance,          (应用程序句柄)

               HINSTANCE    hPrevInstance,      (先前应用程序实例句柄)

 LPSTR      lpCmdLine,         命令行参数

 int    nCmdShow                显示的状态,最大化最小化

6.MFC编程

以C++类的形式封装了Windows API。它可以使用1.VC++进行开发,并且是在使用VC++提供的各种向导的情况下的MFC编程。

7.事件与消息

  1. 产生消息的来源有三个:

     (1) 由操作系统产生;

     (2) 由用户触发的事件转换而来;

 由另一个消息产生。

b) 事件:只能由用户通过外设的输入产生。

例题模板

HelloWorld

void C例2HelloWorldView::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

       CString str(_T("HelloWorld"));

       MessageBox(str);

       CView::OnLButtonDown(nFlags, point);

}

鼠标消息

~view.h中为视图类的添加数据成员

          CString m_str;   //显示信息

          CPoint m_point;  //鼠标位置

void C例3MouseMsgView::OnLButtonDown(UINT nFlags, CPoint point)

{

       // TODO: Add your message handler code here and/or call default

       m_str.Format(_T("鼠标于(%d,%d)处按下"), point.x,point.y);

       m_point=point;

       Invalidate();  //调用重画窗体命令,使系统自动调用OnDraw()显示文字

       CView::OnLButtonDown(nFlags, point);

}

//CDC是CClientDC的基类

void C例3MouseMsgView::OnDraw(CDC* pDC)

{      … …

       // TODO: add draw code for native data here

   //在m_point位置输出信息

       pDC->TextOutW(m_point.x,m_point.y,m_str);

}

OnChar

void C例4键盘消息View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

{

       // TODO: Add your message handler code here and/or call default

       if(nChar == VK_RETURN)    //如按下回车键

      {  

              m_str=_T("");

               m_nLine++;

      }

        else

              m_str+=TCHAR(nChar);   //新行信息连接输入字符

       CClientDC dc(this);        //获取DC设备

       dc.TextOut(0,m_nLine*20,m_str);  //在m_nLine行显示一行信息

       CView::OnChar(nChar, nRepCnt, nFlags);

}

注意:

  • WNDCLASS  窗口类

  • Sln.        工程文件

  • rc.         资源文件

  •  

    上一篇 下一篇

    猜你喜欢

    热点阅读