1 载入资源位图



1 获取程序实例

HINSTANCE   m_hInst;

m_hInst=AfxGetInstanceHandle();                         //获取程序实例

 

2 载入图像

HBITMAP m_bmpTank;

HBITMAP m_bmpBomb;

m_bmpTank=LoadBitmap(m_hInst,MAKEINTRESOURCE(IDB_TANK));

m_bmpBomb=LoadBitmap(m_hInst,MAKEINTRESOURCE(IDB_BOMB));

3 将位图选入DC中

HDC m_TankDC;

HDC m_BombDC;

m_TankDC=CreateCompatibleDC(pDC->m_hDC);

m_BombDC=CreateCompatibleDC(pDC->m_hDC);

//选择图像

SelectObject(m_TankDC,m_bmpTank);

SelectObject(m_BombDC,m_bmpBomb);

 

4 绘图

BitBlt(pTankDC->m_hDC,0,0,TANK_WIDTH,TANK_WIDTH,m_TankDC,0,0,SRCCOPY);

TransparentBlt2(pDC->m_hDC,0,0,nWidth,nHeight,

m_TankDC,   0,0,nWidth,nHeight,RGB(255,0,0));



2 移动Pictutr控件

1 获得Picture的DC

CDC* m_pMapDC=GetDlgItem(IDC_MAP)->GetDC();

CDC* m_pTankDC=GetDlgItem(IDC_TANK)->GetDC();

2 将Picture控件移到指定矩形区域

//设置客户区矩形

m_ClientRect[0]=CRect(20,10,7*WIDTH+20,WIDTH+10);           //IDC_MAP

m_ClientRect[1]=CRect(20,50,NUM*WIDTH+20,NUM*WIDTH+50);     //IDC_FIELD

m_ClientRect[2]=CRect(260,12,TANK_WIDTH+260,TANK_WIDTH+12); //IDC_TNAK

//移动窗体

GetDlgItem(IDC_MAP)->MoveWindow(m_ClientRect[0]);           //IDC_MAP

GetDlgItem(IDC_FIELD)->MoveWindow(m_ClientRect[1]);         //IDC_FIELD

GetDlgItem(IDC_TANK)->MoveWindow(m_ClientRect[2]);

 

3 载入光标

1 载入光标

 

1)从文件载入光标

HCURSOR m_hCursor;

//Load the Cursor

m_hCursor=LoadCursorFromFile("res\\cursor.ani");  //.cur  or .ani

 

2)从程序自己定义的资源光标载入

m_hCursor=AfxGetApp()->LoadCursor(IDR_CURSOR);

3)从默认资源载入

m_hCursor=LoadCursor(NULL,IDC_CROSS);

2 设置光标

 响应WM_SETCURSOR消息,显示适当的光标形状

if(m_hCursor)

{

SetCursor(m_hCursor);

return TRUE;

}

else

return CDialog::OnSetCursor(pWnd, nHitTest, message);

4 播放背景音乐



构造函数:

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

初始化:

HICON icon=LoadIcon(AfxGetInstanceHandle(),(LPCTSTR)IDR_MAINFRAME);

SetIcon(icon,TRUE);

SetIcon(icon,FALSE);

MCI_OPEN_PARMS mciOpen;

//背景音乐

mciOpen.lpstrDeviceType=0;

mciOpen.lpstrElementName="./res/music.mp3";

mciSendCommand(NULL,MCI_OPEN, MCI_OPEN_ELEMENT,(DWORD)&mciOpen);

MCI_PLAY_PARMS mciPlay;

mciPlay.dwFrom = 0;

mciSendCommand(mciOpen.wDeviceID,MCI_PLAY,MCI_NOTIFY | MCI_FROM,(DWORD)&mciPlay);

SetTimer(1,210000,NULL);        //用来循环播放背景音乐

 

OnTimer函数:

OnTimer(UINT nIDEvent)

{

// TODO: 在此加入消息处理程序代码和/或调用默认值

if(nIDEvent==1)

{

MCI_PLAY_PARMS mciPlay;

mciPlay.dwFrom = 0;

mciSendCommand(mciOpen.wDeviceID,MCI_PLAY,MCI_NOTIFY | MCI_FROM,(DWORD)&mciPlay);

}

CDialog::OnTimer(nIDEvent);

}

控制背景音乐的播放:

void CMazeDlg::OnBnClickedBkmusic()

{

// TODO: 在此加入控件通知处理程序代码

UpdateData(TRUE);

if(m_bBkMusic)

{

MCI_PLAY_PARMS mciPlay;

mciPlay.dwFrom = 0;

mciSendCommand(mciOpen.wDeviceID,MCI_PLAY,MCI_NOTIFY | MCI_FROM,(DWORD)&mciPlay);

SetTimer(1,210000,NULL);

}

else

{

KillTimer(1);

mciSendCommand(mciOpen.wDeviceID,MCI_STOP,MCI_WAIT,NULL);

}

}

 

5 线程操作

CWinThread *m_Thread;

UINT Start(LPVOID pPar);               //開始

m_Thread=AfxBeginThread(Start,GetSafeHwnd());

m_Thread->SuspendThread();

m_Thread->SuspendThread();

转自:http://blog.csdn.net/shuilan0066/article/details/7804231

MFC 小知识总结三的更多相关文章

  1. MFC 小知识总结二

    1 UpdateData 不能及时更新控件内容 原因: UpdateData是通过数据交换实现改变控件显示的.改变了之后必需要调用一次OnPaint才干实现刷新. 因此,若是在一个函数里重复多次调用有 ...

  2. MFC 小知识总结五

    1 移动无标题对话框   响应WM_NCHITTEST 消息 [cpp] view plaincopy LRESULT CTimeJishiDlg::OnNcHitTest(CPoint point) ...

  3. MFC 小知识总结四

    1 PlaySound  播放WAV格式的音乐 This function plays a sound specified by a file name, resource, or system ev ...

  4. 【C#小知识】C#中一些易混淆概念总结(三)---------结构,GC,静态成员,静态类

    目录: [C#小知识]C#中一些易混淆概念总结 [C#小知识]C#中一些易混淆概念总结(二) ---------------------------------------分割线----------- ...

  5. Android简易实战教程--第三十四话《 自定义SeekBar以及里面的一些小知识》

    转载本专栏文章,请注明出处尊重原创:博客地址http://blog.csdn.net/qq_32059827/article/details/52849676:小杨的博客 许多应用可能需要加入进度,例 ...

  6. HTML+CSS中的一些小知识

    今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...

  7. web前端基础知识-(三)JavaScript基本操作

    JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行. JavaScrip ...

  8. Jquery:小知识;

    Jquery:小知识: jQuery学习笔记(二):this相关问题及选择器   上一节的遗留问题,关于this的相关问题,先来解决一下. this的相关问题 this指代的是什么 这个应该是比较好理 ...

  9. 12个你未必知道的CSS小知识

    虽然CSS并不是一种很复杂的技术,但就算你是一个使用CSS多年的高手,仍然会有很多CSS用法/属性/属性值你从来没使用过,甚至从来没听说过. 1.CSS的color属性并非只能用于文本显示 对于CSS ...

随机推荐

  1. simulation clock gen unit (推荐)

    //Normal Clock Block always begin:clk_blk clk <=; # clk<=; #; end //Improved Clock Block, impr ...

  2. perl的bareword

    perl的bareword可能被认为:label  . 句柄 .函数 . 普通字符串. 上下文不同,解释器有歧义. 最好用 use strict; use warning;

  3. 【练习】reserving.kr 之Direct3D FPS

    算法函数如图,关键点在标志处,加密字符串如下图 于是写如下脚本: flag_c='436B666B62756C694C455C455F5A461C07252529701734390116494C201 ...

  4. pymongo使用方法

    MongoDB存储     在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python     的PyMong ...

  5. MFC下拉框

    在函数OnInitDialog()中添加一下语句可以添加选项到下拉框中 m_comboBox.AddString(_T("ALKATIP Basma Tom")); m_combo ...

  6. 如何用Jquery做图片展示效果

    一. 前言 到底用JQuery做出怎样的展示效果? 让我们先来看一下!网页加载时,如图所示: 二.本人思路 这个效果初学者看起来好像有点复杂,其实不太难,关键是理清思路,从后端的数据库中找出我们要展示 ...

  7. float.h

    float.h 一背景知识 浮点算术非常复杂   很多小的处理器在硬件指令方面甚至不支持浮点算术   其他的则需要一个独立的协处理器来处理这种运算   只有最复杂的计算机才在硬件指令集中支持浮点运算 ...

  8. 集群高可用之lvs+keepalive

    集群高可用之lvs+keepalive keepalive简介: 负载均衡架构依赖于知名的IPVS内核模块,keepalive由一组检查器根据服务器的健康情况动态维护和管理服务器池.keepalive ...

  9. (转)新ITC提交APP常见问题与解决方法(Icon Alpha,Build version,AppIcon120x120)(2014-11-17)

    1)ICON无法上传,提示图片透明(有Alpha通道) 苹果现在不接受png里的Alpha了,提交的图标带有Alpha通道就提示: 简单处理:用自带的预览打开,导出时不勾选Alpha,仍保存为png格 ...

  10. Python之转换py文件为无需依赖python环境的exe文件的方法

    在日常工作中,使用python脚本开发快速敏捷,但是其代码是可见的,而且充分的依赖python开发环境.为了达到保护我们源码的目的,或者不依赖python开发环境使用python脚本,将其转换成可以直 ...