我的vc++问题集3

来源:互联网 发布:mysql 删除表所有索引 编辑:程序博客网 时间:2024/06/06 08:45

 1.如何设置对话框最大时的大小?
 当对话框的大小和位置发生变化时,会接收到WM_GETMINMAXINFO消息。用户只要在该消息处理函

数中
 设置对话框的大小就可以了。WM_GETMINMAXINFO消息处理函数语法如下:
 afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
 参数说明:
 lpMMI:是MINMAXINFO结构指针,该结构记录着对话框最大化,最小化时的大小,用户限制对话框

大小。
 其中,ptMaxSize成员用户设置对话框最大化时的高度和宽带;ptMaxPosition成员标识对话框最

大化时的位置。
 实例代码:
 void CLimitSizeDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
 {
  lpMMI->ptMaxSize.x = 800;    //设置对话框最大化时的宽度
  lpMMI->ptMaxSize.y = 600;    //设置对话框最大化时的高度

  lpMMI->ptMaxPosition.x = 50; //设置对话框最大化时左边位置
  lpMMI->ptMaxPosition.y = 50; //设置对话框最大化时上访位置
  CDialog::OnGetMinMaxInfo(lpMMI);
 }
22.关于光盘自动运行:
 当光盘中含有"autorun.exe"、"run.ico"和"autorun.inf",其中"autorun.exe"是光盘自动播放

时执行的可执行文件,
 "run.ico"是光盘的图标,"autorun.inf"是一个INF文件。只要光盘中含有这三个文件,就会自动

运行。

23.关于AVI文件的播放:
 在MFC库中提供了CAnimateCtrl类,用于播放AVI动画,该类的主要方法如下:
  Open,Play,Stop,Close等。
 注意:CAnimateCtrl类只能播放无声音的AVI文件,如果播放有声音的AVI文件,需要使用微软

ActiveX控件CAnimation
 
24.如何阻止窗口移动?
 要实现不允许拖动窗体的功能,只需要通过主窗口的虚函数PreTranslateMessage(MSG* pMsg)

截获鼠标按下的消息,
 将单击标题栏的消息修改成单击非标题栏区域的消息即可。
 如下实现代码:
 BOOL CBKydctDlg::PreTranslateMessage(MSG* pMsg)
 {
  if(pMsg->message==WM_NCLBUTTONDOWN)
  {
   pMsg->message = WM_LBUTTONDOWN;
  }
  return CDialog::PreTranslateMessage(pMsg);
 }

25.WM_NCLBUTTONDOWN和WM_LBUTTONDOWN的区别:
 NC是非客户区,包含标题和菜单等

26.如何使窗口始终在最前面?
 要实现将自己的程序永远置前可以使用API函数
 SetWindowPos(AfxGetMainWnd()->m_hWnd,HWND_TOPMOST,10,10,450,300,SWP_NOMOVE)。

27.如何实现动画显示窗体
 要实现动画显示窗体,需要把MoveWindow函数和定时器结合使用,MoveWindow函数可以改变
 制定窗口的位置和尺寸,结合定时器以后可以在一定时间内改变窗口的位置和尺寸。
 如下为实例程序:
  void CDHxsctDlg::OnTimer(UINT nIDEvent)
  {
   CRect rect,rc;
   GetWindowRect(rect);
   GetDesktopWindow()->GetWindowRect(rc);
   MoveWindow((-m_dx+rc.Width()-rect.Width())/2,
     (-m_dy+rc.Height()-rect.Height())/2,
     +m_dx+rect.Width(),+m_dy+rect.Height());
   if(rect.Height()>=m_height)
   {
    m_dy=0;
   }
   if((rect.Width()>=m_width)&&(rect.Height()>=m_height))
   {
    KillTimer(1);
   }
   CDialog::OnTimer(nIDEvent);
  }

28.如何在视图窗口中创建一个区域?
 创建一个视图区域可以通过调用CreateEllipticRgn函数.
 下面为实例代码:
 CRgn rgn;
 HRGN m_hrgn;
 m_hrgn = ::CreateEllipticRgn(64,40,186,165);
 rgn.Attach(m_hrgn); 
 CBrush m_brush (1,RGB(100,100,100));
 pDC->SelectClipRgn(&rgn,0);
 pDC->FillRgn(&rgn,&m_brush);

29.如何实现窗体标题栏的闪烁
 要实现窗体标题栏的闪烁,需要使用FlashWindow函数来实现。

30.如何实现拖动没有标题栏的窗体
 我们可以截获用户在客户区按下的鼠标左键消息,然后在OnLBtuuonDown消息处理函数中使用 

PostMessage函数传送WM_NCLBUTTONDOWN消息,使Windows认为鼠标是在标题栏上。
 如下为示例代码:
  void CTuodongDlg::OnLButtonDown(UINT nFlags, CPoint point)
  {
   CDialog::OnLButtonDown(nFlags, point);
   PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
  }

原创粉丝点击