VC知识(一)

                          $MFC和API函数$
1.  取当前屏幕的宽高
GetSystemMetrics(SM_CXSCREEN);
GetSystemMetrics(SM_CYSCREEN);
2.  定义GDI图形环境
HDC MemDC=CreateCompatibleDC(0);// 创建设备场景1
HDC hScrDC=CreateDC("DISPLAY",NULL,NULL,NULL);//创建屏幕设备场景
HDC MemDC=CreateCompatibleDC(hScrDC);//创建设备场景2
HBITMAP bit=CreateCompatibleBitmap(hScrDC,nwidth,nHeight);//创建位图内存
SelectObject(memDC,bit);//位图内存与设备场景关联
3.  图形拷贝
BitBlt(HMDC0,x0,y0,w,h,HMDC1,x1,y1,SRCCOPY);
4.  调BMP图形到内存
bit=(HBITMAP)LoadImage(AfxGetInstanceHandle(),cc,IMAGE_BITMAP,0,0,
        LR_LOADFROMFILE|LR_CREATEDIBSECTION);
5.  可缩放的屏幕拷贝
LPBITMAPINFOHEADER bi1;
StretchDIBits(hMDC,0,0,w,h,
     tmp+256*sizeof(RGBQUAD)+bi1->biSize,
     (BITMAPINFO*)bi1,DIB_RGB_COLORS,SRCCOPY);
6.  内存拷贝
memcpy(目标内存,源内存,数据长度);
7.  透明色拷贝
void TransparentBlt(HDC hdc0,int nX0,int nY0,int nW0,int nH0,
     HDC hdc1,int nX1,int nY1,int nW1,int nH1,
     UINT Tcol);
8.  半透明拷贝
AlphaBlend(hDC0,x0,y0,w0,h0,
     hDC1,x1,y1,w1,h1,
     rBlend);
/*
其中半透明参数
rBlend是一个BLENDFUNCTION类型的结构
BLENDFUNCTION rBlend;
rBlend.SourceConstantAlpha=128;//透明度
//0-源全透明,源仿佛不存在;255-源不透明,目标仿佛不存在
rBlend.BlendOp=AC_SRC_OVER;
rBlend.BlendFlags=0;
rBlend.AlphaFormat=0;
*/
9.  消息框
AfxMessageBox("显示信息");
10.  向设备场景写字
SetTextColor(MemDC,RGB(255,255,255))//设置地图设备场景字色
SetBkMode(MemDC,TRANSPARENT);
TextOut(MemDC,150,100,cc,lstrlen(cc));
11.  取当前屏幕尺寸
GetWindowRect(rect);
12.  取当前目录
GetCurrentDirectory(255,appdir);
13.  置当前记录
SetCurrentDirectory(appdir);
14.  设置时间函数调用周期
SetTimer 参数说明
SetTimer(1,             150,              NULL);
设定时器(第一个定时器,  间隔时间(毫秒),   空值);
15.  停止时间函数第n个调用
KillTimer(1);
16.  取当前时间(秒)
tim=timeGetTime();
17.  延时n秒
Sleep(n);
18.  随机数发生器
rand();
19.  创建画笔,画线
pen0.CreatePen(PS_SOLID,1,RGB(0x0,0xf0,0xf0));//创建画笔, 线宽1,色紫
SelectObject(hdc,pen0);//画笔关联到hdc
POINT Point;Point.x=0;Point.y=0;//定义点(0,0)
MoveToEx(hdc,x0,y0,&Point);
LineTo(hdc,x1,y1);
20.  创建画刷 画矩形
CBrush Brush(RGB(0xd0,0xd0,0xd0));//定义灰色画刷
SelectObject(hdc,Brush);//画刷关联到hdc
PatBlt(hdc,x,y,w,h,PATCOPY);
21.  播放WAV声音
sndPlaySound("砍1.wav",SND_ASYNC);
22.  建立MID播放环境 播放MID音乐
hMCI=MCIWndCreate(NULL,NULL,WS_POPUP
      |MCIWNDF_NOPLAYBAR
      |MCIWNDF_NOMENU
      ,name);//MID文件名
MCIWndPlay(hMCI);//播放MID
MCIWndGetLength(hMCI);//为当前mid文件的长度位置
MCIWndGetPosition(hMCI);//为mid文件播放位置
                          

                   $常见的功能函数源程序$
1.  写外部文件
FILE *f;//定义文件句柄
f=fopen("game.dat","w");//读方式打开文件"game.dat"
fprintf(f,"%s/n",mapbak);//写地图块名
fclose(f);//关闭文件
2.  读外部文件
FILE *f;//定义文件句柄
f=fopen("game.dat","r");//读方式打开文件"game.dat"
fscanf(f,"%d/n",&rs);//读一个数据到整型变量rs中
fclose(f);//关闭文件
3.  写二进制文件
CFile file;
if(!file.Open(cc,CFile::modeCreate|CFile::modeWrite,NULL)) return;
file.Write(buf,len);
file.Close();

4.  读二进制文件
CFile file;
if(!file.Open(cc,CFile::modeRead,NULL)) return;
len=file.GetLength();
stmp=(BYTE*)new BYTE[len];
file.Read(stmp,len);
file.Close();

5.  选择目录
BROWSEINFO *m_pbi;
char m_buffer[MAX_PATH];
m_pbi = NULL;
m_pbi = new BROWSEINFO();
::ZeroMemory(m_pbi, sizeof(BROWSEINFO));
m_pbi->hwndOwner = GetSafeHwnd();
m_pbi->pszDisplayName = m_buffer;
m_pbi->lpszTitle = "选择目录";
m_pbi->pidlRoot=0;
m_pbi->ulFlags =BIF_EDITBOX ;// BIF_RETURNONLYFSDIRS;
ITEMIDLIST *idl = SHBrowseForFolder (m_pbi);
if (idl)

 SHGetPathFromIDList (idl, m_buffer); // get path string from ITEMIDLIST
 dirna=m_buffer;
 LPMALLOC lpm;
 if (SHGetMalloc (&lpm) == NOERROR)
  lpm->Free(idl);    // free memory returned by SHBrowseForFolder
 //shulian=findfile0(dirna,"*.bmp");
}
delete[] m_pbi;
//SetDlgItemText(IDC_EDIT1, dirna);
//CString cc;
//cc.Format("%d",shulian);
//SetDlgItemText(IDC_EDIT2, cc);
6.  遍历目录
int findfile0(CString DirName,CString ext)//
{ WIN32_FIND_DATA FindFileData;
 HANDLE hFindFile;
 SetCurrentDirectory(DirName);//AfxMessageBox(DirName);
 hFindFile=FindFirstFile(ext,&FindFileData);
 CString tFile;
 int p=0;
 if (hFindFile!=INVALID_HANDLE_VALUE)
 { do {tFile=FindFileData.cFileName;
    if ((tFile==".")||(tFile=="..")) continue;
    if (!(FindFileData.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY)) 
    {p++;
    }
   }
  while (FindNextFile(hFindFile,&FindFileData));
 }
 return p;
}
7.  选择文件名对话框
CString name;
CString filt="dat (*.dat)|*.dat";
CFileDialog fileDlg(TRUE,"*.dat","*.dat",NULL,filt,this);
fileDlg.m_ofn.Flags|=OFN_FILEMUSTEXIST;
fileDlg.m_ofn.lpstrTitle="调入地图文件";
if(fileDlg.DoModal()==IDOK)
{
 name=fileDlg.GetPathName();
//--------------------------------------------------------------------
    //m_game.loadmap(name);   //调入地图
    //m_game.loadza (name);   //调入障碍表
    //m_game.getsmap();    //生成小地图
}
8.  调BMP图片
/*void*/BYTE* LoadBmp(/*HDC hdc,*/CString fileName/*,int pop*/)//调图片
{ //===================================================================
 //LPBITMAPINFOHEADER bi1,m_lpBi;
 HANDLE m_Buf= NULL;
 LPVOID lpmem = NULL;
 CFile file;
 if( !file.Open( fileName,CFile::modeRead)) return ;
 BITMAPFILEHEADER fileinfo;
 file.Read(&fileinfo,sizeof(fileinfo));
 if(fileinfo.bfType != (('M'<<8)+'B')) return ;
 UINT m_Off=fileinfo.bfOffBits;
 UINT length = file.GetLength() - sizeof(BITMAPFILEHEADER);
 if(m_Buf != NULL)
 {GlobalFree(m_Buf);  m_Buf = NULL; }
 m_Buf = GlobalAlloc(GMEM_MOVEABLE|GMEM_DISCARDABLE,length);
 lpmem = GlobalLock(m_Buf);//图形数据指针lpmem
 if(length != file.ReadHuge(lpmem,length))
 { GlobalUnlock(m_Buf);
  GlobalFree(m_Buf);
  return NULL;
  //return;
 }

 BYTE *tmp;
 memcpy(tmp,lpmem,length);
 GlobalUnlock(m_buf);
 GlobalFree(m_buf);
 return tmp;
//--------------------------------------------------------------------------------
/* bi1=(BITMAPINFOHEADER *)lpmem;
 bi1->biSize = sizeof(BITMAPINFOHEADER);
 bi1->biSizeImage=bi1->biWidth*bi1->biHeight;
 int cols=PaletteSize((LPBYTE)bi1);
 int len0=bi1->biSize+bi1->biSizeImage+cols;
 if(bi1->biSizeImage<10) return;

 unsigned char aa[42*1024];
 memcpy(aa,(LPBYTE)lpmem+40,len0);
 for(int i0=0;i0<(int)bi1->biSizeImage;i0++)
      if(aa[i0]==0xff) aa[i0]=0;
 memcpy((LPBYTE)lpmem+40,aa,len0);
 bi1=(BITMAPINFOHEADER *)lpmem;

 m_lpBi=icmode(bi1);//压缩位图
 bi1=(BITMAPINFOHEADER *)m_lpBi;
 bi1->biSize = sizeof(BITMAPINFOHEADER);
 int len1=bi1->biSize+bi1->biSizeImage+cols;
 memcpy(buf+bufadd[pop],bi1,len1);
 l0+=len1;bufadd[pop+1]=l0;
 GlobalUnlock(m_Buf);GlobalFree(m_Buf);
///
    CString cc;
 cc=fileName.Left(lstrlen(fileName)-3);
 cc+="txt";
 FILE *f;
    f=fopen(cc,"r");
    if(f!=NULL)
 {fscanf(f,"%d,%d",&bufx[pop],&bufy[pop]);//角色的偏移位置
  fclose(f);
 }

 memcpy(tmp,buf+bufadd[pop],len1);
 bi1=(BITMAPINFOHEADER *)tmp;
 int w =bi1->biWidth;
 int h =bi1->biHeight;

 StretchDIBits(hMDC,0,0,w,h,0,0,w,h,
      tmp+256*sizeof(RGBQUAD)+bi1->biSize,
      (BITMAPINFO* )bi1,DIB_RGB_COLORS,SRCCOPY);
 TransparentBlt2(hdc,10,10,w,h,hMDC,0,0,w,h,RGB (255,255,255));//显示
///
 cc.Format("%d:%d-%d  %d",pop,len0,len1,l0);*/
}
9.  压缩位图
LPBITMAPINFOHEADER icmode(LPBITMAPINFOHEADER bi1)//压缩位图
{ HIC hIC;
 if(bi1==NULL){AfxMessageBox("无图形数据!");return NULL;}
 int cols=PaletteSize((LPBYTE)bi1);
 LPBITMAPINFOHEADER m_lpBi=bi1;
 if(bi1->biBitCount<=8)//是8位色
 hIC = ICOpen(mmioFOURCC('V', 'I', 'D', 'C'),
     mmioFOURCC('m', 'r', 'l', 'e'),ICMODE_FASTCOMPRESS);
 else
 hIC = ICOpen(mmioFOURCC('V', 'I', 'D', 'C'),
     mmioFOURCC('m', 's', 'v', 'c'),ICMODE_FASTCOMPRESS);
 HANDLE hDID = ICImageCompress(hIC,0,(LPBITMAPINFO)bi1,
                   (LPBYTE)bi1 + (WORD)bi1->biSize + cols,NULL,6500,NULL);
 LPBITMAPINFOHEADER lpBI1 = (LPBITMAPINFOHEADER)GlobalLock(hDID);
// MoveMemory((LPBYTE)lpBI1+(WORD)lpBI1->biSize,(LPBYTE)bi1+(WORD)bi1->biSize,cols);
 memcpy((LPBYTE)m_lpBi,(LPBYTE)lpBI1,lpBI1->biSize+lpBI1->biSizeImage+PaletteSize((LPBYTE)lpBI1));
 ICClose(hIC);
 GlobalUnlock(hDID);GlobalFree(hDID);
 return m_lpBi;
}

10.  GDI设备图形装入DX缓存页面
设备场景MemDC中宽w,高h的图形装入缓存页面DXSgonh(x,y)处
HDC hdc;
if(DXSgonh->GetDC(&hdc)!=DD_OK) return FALSE;
BitBlt(hdc,x,y,w,h,MemDC,0,0,SRCCOPY);
DXSgonh->ReleaseDC(hdc);

11.  DX缓存页面间的拷贝
rect.left=0,rect.top=0,rect.right=w,rect.bottom=h;
if(DXSBack1->BltFast(x,y,DXSgonh,&rect,dwTrans)!=DD_OK) return;

12.  通用消息函数中对键盘 鼠标消息的处理方法
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
 if(pMsg->message==WM_KEYDOWN)
 {
   int key=pMsg->wParam;
   if(key==46) m_game.Delete(); //按DEL键,删除对象
 }
 if(pMsg->message==WM_LBUTTONDBLCLK) //双击左键
 {m_game.Insert(no,dorj);}  //插入对象
}

13.  滚动条消息
void CMyDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)//地图编辑用
{ int tml=m_hscroll.GetScrollPos();  //取得滚动条当前位置
 switch (nSBCode)
  {case SB_LINEUP: tml-=1;  break; //按上键
   case SB_LINEDOWN: tml+=1;  break; //按下键
   case SB_PAGEUP: tml-=10; break; //上页
   case SB_PAGEDOWN: tml+=10; break; //下页
   case SB_THUMBTRACK:tml=nPos;break; //拖滑块
   default:break;
  }
 m_game.tml=tml;
 m_hscroll.SetScrollPos(tml);   //设置滚动条新位置
 CClientDC dc(this);
 m_game.getwp(dc.m_hDC,dorj);   //显示选择对象
 CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

               $VC窗口 控件的基本操作命令$
GetDlgItem(IDC_EDIT1)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT1)->SetWindowText("cc");
GetDlgItem(IDC_LIST1)->ShowWindow(SW_HIDE);
GetDlgItem(IDCANCEL)->MoveWindow(x,y,w,h,TRUE);
SetDlgItemText(IDC_STATIC0,cc);
GetDlgItemText(IDC_STATIC0,cc);
MoveWindow(x,y,w,h);
CenterWindow();
UpdateData(TRUE);
UpdateData(FALSE);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VC知识库中打开杂志有以下几个步骤: 首先,打开VC知识库的应用程序或者网页。可以在电脑上安装VC知识库的应用程序,或者访问VC知识库的官方网站。 其次,在VC知识库的主界面上寻找到“杂志”或者“期刊”这个标签或者选项。通常,这个选项会位于主界面的顶部菜单栏或者侧边栏中。 然后,点击“杂志”或者“期刊”这个选项,进入杂志的浏览界面。在这个界面上,你可以看到不同杂志的列表或者封面。有时候,VC知识库也会提供搜索功能,你可以通过输入杂志的名称或者关键词来查找特定的杂志。 接下来,选择你感兴趣的杂志,并点击打开。VC知识库可能会提供一个翻阅杂志的功能,类似于在线阅读器。你可以使用鼠标滚轮或者点击界面上的翻页按钮来切换页面。另外,你还可以使用缩放功能调整页面的大小,以便更清晰地阅读内容。 最后,如果你想保存或者下载杂志,VC知识库通常也会提供这样的选项。你可以通过点击界面上的保存按钮或者下载按钮来完成操作。保存的杂志可以随时在VC知识库中进行查阅,而下载的杂志可以保存到你的电脑或者设备中,方便离线阅读。 总而言之,通过打开VC知识库的应用程序或者网页,点击杂志或者期刊选项,浏览并打开感兴趣的杂志,最后保存或下载需要的杂志,就可以在VC知识库中打开杂志了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值