现在的位置: 首页 > 综合 > 正文

MFC 小知识总结四

2013年08月20日 ⁄ 综合 ⁄ 共 2030字 ⁄ 字号 评论关闭

1 PlaySound  播放WAV格式的音乐

This function plays a sound specified by a file name, resource, or system event.

BOOL WINAPI PlaySound( 
  LPCSTR pszSound, 
  HMODULE hmod, 
  DWORD fdwSound 
);

头文件

#include < Mmsystem.h>	


播放音乐

PlaySound(L"1.wav", NULL, SND_ASYNC | SND_FILENAME );

// SND_ASYNC  异步播放     即: 执行完这一句,直接执行下一条语句  ,播放交由播放器播放着

// SND_SYNC    同步播放     即:  执行这一语句后,先不执行下一条语句,而是等播放器播放完这段音乐后,再执行下一条语句


循环播放

PlaySound(currentDirectory, NULL, SND_ASYNC | SND_FILENAME |SND_LOOP);

停止播放

PlaySound(NULL, NULL, SND_ASYNC | SND_FILENAME );

2 对话框初始化后马上进行的操作

  

    如果把诸多操作都放在初始化中,那么,对话框需要很长时间才完成初始化。 因此,对话框会延迟出现,不能及时蹦出。

    方法一 : 设置定时器 

SetTimer(1,50,NULL);

   方法二:PostMessage() 发送消息 通知初始化完成

 3  更新对话框上 某几个控件的值

	void UPDATE(){

		UpdateData(FALSE);

		GetDlgItem(IDC_COMBO2)->RedrawWindow();
		GetDlgItem(IDC_EDIT2)->RedrawWindow();
		GetDlgItem(IDC_EDIT3)->RedrawWindow();
		GetDlgItem(IDC_EDIT4)->RedrawWindow();
	};

4  在屏幕上绘图


    Bitmap bmp(400,100);  
    Graphics grp(&bmp);  // 先绘制在位图中

    CWindowDC dc(CWnd::GetDesktopWindow());
    Graphics gDeskTop(dc.GetSafeHdc());       //将位图绘制在屏幕中

		grp.FillRectangle(&backBrush,0,0,400,100);

		grp.DrawString(   
			string.GetBuffer(),   
			string.GetLength(),   
			&myFont,  
			rect,   
			&format,   
			&brush );  



		gDeskTop.FillRectangle(&backBrush,0,0,400,100);

		gDeskTop.DrawImage(&bmp,0,0,400,100);

5 check box control  设置选中状态,并将其默认 不能再选择

CButton CheckButton;   //关联一变量

		m_CheckButton.SetCheck(1);               //选中
		m_CheckButton.EnableWindow(FALSE);       //不能再选

6 CFileDialog显示两种扩展名

CFileDialog dlg(TRUE,NULL,NULL,0,"图片文件(*.jpg;*.bmp)|*.jpg;*.bmp||",this);///TRUE为OPEN对话框,FALSE为SAVE AS对话框

7  去掉标题栏的语句

  //去除标题和边框
    SetWindowLong(m_hWnd, GWL_STYLE, GetWindowLong(m_hWnd, GWL_STYLE)&(~(WS_CAPTION | WS_BORDER)));
  // 置对话框为最顶端并扩充到整个屏幕
    ::SetWindowPos(m_hWnd, HWND_TOPMOST, -(GetSystemMetrics(SM_CXBORDER)+1),
      -(GetSystemMetrics(SM_CYBORDER)+1), cx+1,cy+1, SWP_NOZORDER);
 
//还原标题栏和边框
    SetWindowLong(this-> GetSafeHwnd(), GWL_STYLE, GetWindowLong(m_hWnd,GWL_STYLE) + (WS_CAPTION|WS_BORDER) );
    ::SetWindowPos(m_hWnd, HWND_TOPMOST, 500, 300, 600,500, SWP_SHOWWINDOW);


8 判断按下CTL+V组合键

BOOL CRichEditDlg::PreTranslateMessage(MSG* pMsg)
{
	

	if (pMsg->message==WM_KEYDOWN)
	{
		if (pMsg->wParam=='V'&&(GetKeyState(VK_CONTROL)<0))//按下CTRL+V
		{
			OnPaste();
			return TRUE;//直接返回 要不然会响应系统的粘贴消息  从而导致粘贴2遍
		}
	}
//
}

抱歉!评论已关闭.