我的vc++问题集3

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));
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值