VC知识(一)
- VC知识(一) 推荐度:
- 相关推荐
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);
- rowid与rownum的含义是什么?
- DCMM是什么
- 智源社区AI周刊No.101:DeepMind推出AlphaTensor登Nature封面;stateof.ai发布AI情况报告...
- VMware虚拟机使用Ubuntu全屏问题
- Window Server 2008虚拟机安装
- 声音的数字化表示
- 50+ Best Unity Assets: Shader, Editor Extensions, Level Editors, Models, Terrain
- 综合案例:选餐
- Linux下网络流量实时监控
- 网络设备流量及性能监控的实现
- 怎么把电脑上的准考证发送到手机上呢
- TCPIP和TCP,UDP
- Postgresql通过docker进行高可用部署 pgpool
- Shiro系统权限管理、及原理剖析
- 学习LSSVM以及区别LSSVM和SVM看的几篇博文
- 【十一届蓝桥杯】
- DBCC