VC开发技术总结.docx
- 文档编号:14484539
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:15
- 大小:20KB
VC开发技术总结.docx
《VC开发技术总结.docx》由会员分享,可在线阅读,更多相关《VC开发技术总结.docx(15页珍藏版)》请在冰点文库上搜索。
VC开发技术总结
VC开发技术总结
1、基本知识
1.格式化字符串
UINTnID=99;
wchar_tbuffer_format[128]={0};
swprintf_s(buffer_format,_T("pTTTStruct->idFrom\%i\0"),nID);
2.控件和类
PictureControl就是CStatic
图像类CBitmap
3.调试,对话框
MessageBox(_T("导入背景图失败!
"),_T("提示"),MB_OK);
DWORDWINAPIGetLastError(void);
TRACE(_T("\n\n这是一个图片"));
TRACE(_T("\n\n这是一个图片%i"),3);
4.原子操作
AddAtom、DeleteAtom、FindAtom、GetAtomName、GlobalAddAtom、
GlobalDeleteAtom、GlobalFindAtom、GlobalGetAtomName
5.窗口操作
GetParentFrame();
6.关于系统消息和系统虚函数
注意public和protected:
public:
afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct);
afx_msgHBRUSHOnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor);
public:
virtualvoidOnDraw(CDC*pDC);//重写以绘制该视图
virtualBOOLPreCreateWindow(CREATESTRUCT&cs);
protected:
virtualBOOLOnPreparePrinting(CPrintInfo*pInfo);
virtualvoidOnBeginPrinting(CDC*pDC,CPrintInfo*pInfo);
virtualvoidOnEndPrinting(CDC*pDC,CPrintInfo*pInfo);
7.系统相关API等
KillTimer(hWnd,0);
CloseWindow(hWnd);
exitinstance();
exit(0);
DWORDdwProcessId=0;
DWORDdwThreadID=GetWindowThreadProcessId(hWnd,&dwProcessId);
longintance=GetWindowLong(hWnd,GWL_HINSTANCE);
TerminateProcess(&dwProcessId,0);
TerminateProcess(&dwThreadID,0);
//以下三种均可正常关闭窗口
PostQuitMessage(0);
SendMessage(hWnd,WM_CLOSE,0,0);
DestroyWindow(hWnd);
GetDocument();
8.其它
2、在设备上动态显示图片CDC,CBitmap,BITMAP,HBITMAP
voidCMFCViewTestView:
:
OnDraw(CDC*pDC)
{
BITMAPbitmap;
CBitmapcBitmap;
HBITMAPhBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),_T("res//PH02740U.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
cBitmap.DeleteObject();
if(!
cBitmap.Attach(hBitmap))
{
MessageBox(_T("导入背景图失败!
"),_T("提示"),MB_OK);
return;
}
cBitmap.GetObject(sizeof(BITMAP),&bitmap);
CDCcompDC;
compDC.CreateCompatibleDC(pDC);
compDC.SelectObject(&cBitmap);
pDC->BitBlt(100,20,bitmap.bmWidth,bitmap.bmHeight,&compDC,0,0,SRCCOPY);
compDC.DeleteDC();
}
3、屏幕坐标和用户区坐标
举例:
//GetClientRect(&rect);
m_static.GetWindowRect(&rect);
ScreenToClient(&rect);
//MoveWindow(rect);
m_static.SetWindowPos(m_static.GetParent(),rect.left,rect.top,0,0,SWP_NOZORDER|SWP_NOSIZE);
voidCALLBACKTimerProc(HWNDhWnd,UINTnMsg,UINTnTimerid,DWORDdwTime)
{
SendMessage(hWnd,WM_CLOSE,0,0);
}
//m_static.SetWindowPos(NULL,0,0,0,0,SWP_NOSIZE);
4、资源
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
5、在设备上输出文字
CDC*pDC;
CFontfont;
font.CreateFont(
80,0,700,0,FW_BOLD,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T("Arial"));//FW_NORMAL
pDC->SelectObject(&font);
pDC->SetTextColor(RGB(255,20,60));//设置字体颜色
pDC->TextOut(600,300,_T("横七竖八"));
6、控件提示信息框
控件属性:
SS_NOTIFY//Notify=True;
在h文件中:
protected:
CToolTipCtrlm_pToolTipCtrl;
public:
afx_msgBOOLOnToolTipNotify(UINTid,NMHDR*pNMHDR,LRESULT*pResult);
在cpp文件中:
BEGIN_MESSAGE_MAP(CMenuTestDlg,CDialogEx)
ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipNotify)
END_MESSAGE_MAP()
BOOLCMenuTestDlg:
:
OnInitDialog()
{
CDialogEx:
:
OnInitDialog();
m_pToolTipCtrl.AddTool(GetDlgItem(IDC_BITMAP1),LPSTR_TEXTCALLBACK);
EnableToolTips(TRUE);
returnTRUE;//除非将焦点设置到控件,否则返回TRUE
}
intCMenuTestDlg:
:
OnCreate(LPCREATESTRUCTlpCreateStruct)
{
if(CDialogEx:
:
OnCreate(lpCreateStruct)==-1)
return-1;
if(!
m_pToolTipCtrl.Create(this))returnFALSE;
//TODO:
在此添加您专用的创建代码
return0;
}
BOOLCMenuTestDlg:
:
OnToolTipNotify(UINTid,NMHDR*pTTTStruct,LRESULT*pResult)
{
UNREFERENCED_PARAMETER(id);
TOOLTIPTEXT*pTTT=(TOOLTIPTEXT*)pTTTStruct;
UINTnID=pTTTStruct->idFrom;
if(pTTT->uFlags&&TTF_IDISHWND)
{
nID=:
:
GetDlgCtrlID((HWND)nID);
switch(nID)
{
caseIDC_BITMAP1:
pTTT->lpszText=_T("这是一个图片控件PictureControl");
pTTT->hinst=AfxGetResourceHandle();
break;
caseIDC_STATIC2:
pTTT->lpszText=_T("这是一个静态文本控件StaticText");
pTTT->hinst=AfxGetResourceHandle();
break;
caseIDC_LIST1:
pTTT->lpszText=_T("这是一个列表框控件StaticText");
pTTT->hinst=AfxGetResourceHandle();
break;
}
}
*pResult=0;
returnTRUE;
}
7、鼠标事件
afx_msgBOOLOnSetCursor(CWnd*pWnd,UINTnHitTest,UINTmessage);
afx_msgvoidOnRButtonDown(UINTnFlags,CPointpoint);
8、MFC架构
voidCMenuTestDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialogEx:
:
DoDataExchange(pDX);
DDX_Control(pDX,IDC_STATIC1,m_static);
}
BEGIN_MESSAGE_MAP(CMenuTestDlg,CDialogEx)
ON_WM_PAINT()
ON_COMMAND(ID_InsertMenuItem,&CMenuTestDlg:
:
OnInsertmenuitem)
ON_WM_SETCURSOR()
END_MESSAGE_MAP()
9、动态生成
10、窗口及窗口消息
//窗口颜色更改
afx_msgHBRUSHOnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor);
11、定时器
//SetTimer((UINT)m_hWnd,(UINT)5555,TimerProc);//触发定时器程序TimerProc工作
SetTimer((UINT)m_hWnd,(UINT)60,NULL);//启动窗口hWnd的定时器
voidCDlgCtrlTest:
:
OnTimer(UINT_PTRnIDEvent){
CRectrect;
////GetClientRect(&rect);
m_static.GetWindowRect(&rect);
ScreenToClient(&rect);
//MoveWindow(rect);
m_static.SetWindowPos(m_static.GetParent(),rect.left,rect.top,0,0,SWP_NOZORDER|SWP_NOSIZE);
m_static.RedrawWindow();
CDialogEx:
:
OnTimer(nIDEvent);
}
12、消息
13、字体
//更改CStaticControl控件
CFont*cFont=newCFont;
cFont->CreateFont(48,0,600,90,FW_BOLD,FALSE,FALSE,0,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH&FF_SWISS,_T("Arial"));
//cFont->CreatePointFont(4,_T("楷体"));
GetDlgItem(IDC_STATIC1)->SetFont(cFont);
14、AnimationControl控件
if(m_animate.Open(_T("res\\correct.avi")))
{
m_animate.Play(0,(UINT)-1,(UINT)-1);//从头播放到尾
}
15、图片
1.
16、DLL动态链接库
1.
17、菜单CMenu
1.动态生成菜单
2.删除菜单命令
3.删除部分菜单
4.增加菜单命令
5.替换整个菜单
6.菜单响应(单击)
7.右键快捷菜单
BEGIN_MESSAGE_MAP(CMenuTestDlg,CDialogEx)
ON_COMMAND(ID_InsertMenuItem,&CMenuTestDlg:
:
OnInsertmenuitem)
ON_COMMAND(ID_DeleteMenuItem,&CMenuTestDlg:
:
OnDeletemenuitem)
ON_COMMAND(ID_DeleteMenu,&CMenuTestDlg:
:
OnDeletemenu)
ON_COMMAND(ID_MenuReplace,&CMenuTestDlg:
:
OnMenureplace)
ON_WM_RBUTTONDOWN()
END_MESSAGE_MAP()
BOOLCMenuTestDlg:
:
OnInitDialog(){
BOOLCMenuTestDlg:
:
OnInitDialog()
//将“关于...”菜单项添加到系统菜单中。
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
BOOLbNameValid;
CStringstrAboutMenu;
bNameValid=strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
m_Menu.LoadMenu(IDR_MENU_TEST);//IDR_MENU1
SetMenu(&m_Menu);//TODO:
在此添加额外的初始化
returnTRUE;//除非将焦点设置到控件,否则返回TRUE
}
voidCMenuTestDlg:
:
OnInsertmenuitem()
{
MENUITEMINFOmInfo;
wchar_tbuffer_format[128]={0};
swprintf_s(buffer_format,_T("动态菜单命令%i\0"),ID_MENUID_START);
mInfo.cbSize=sizeof(MENUITEMINFO);
mInfo.dwTypeData=buffer_format;
mInfo.fType=MFT_STRING;
mInfo.wID=ID_MENUID_START;
ID_MENUID_START=ID_MENUID_START+1;
mInfo.fMask=MIIM_DATA|MIIM_TYPE|MIIM_ID;
//在当前菜单命令位置前增加新菜单命令
AfxGetMainWnd()->GetMenu()->InsertMenuItemW(ID_InsertMenuItem,&mInfo,FALSE);
AfxGetMainWnd()->DrawMenuBar();//绘制菜单
AfxGetMainWnd()->GetMenu()->Detach();
}
voidCMenuTestDlg:
:
OnDeletemenuitem()
{
CStringstrName;
CMenu*pMenu=AfxGetMainWnd()->GetMenu();
//MF_BYPOSITION或MF_BYCOMMAND
pMenu->GetMenuString(ID_DeleteMenuItem,strName,MF_BYCOMMAND);
HWNDm_hWnd=GetSafeHwnd();
HMENUhMenu=:
:
GetMenu(m_hWnd);
DeleteMenu(hMenu,ID_DeleteMenuItem,MF_BYCOMMAND);
MessageBox(strName);
}
voidCMenuTestDlg:
:
OnDeletemenu()
{
//TODO:
在此添加命令处理程序代码
HWNDm_hWnd=GetSafeHwnd();
//删除自身菜单命令
HMENUhMenu=:
:
GetMenu(m_hWnd);
DeleteMenu(hMenu,0,MF_BYPOSITION);
AfxGetMainWnd()->DrawMenuBar();//绘制菜单
}
voidCMenuTestDlg:
:
OnMenureplace()
{
CMenumenu;//定义菜单对象
menu.LoadMenuW(IDR_MAINFRAME1);//加载信息菜单
AfxGetMainWnd()->SetMenu(&menu);//设置菜单
AfxGetMainWnd()->DrawMenuBar();//绘制菜单
menu.Detach();//
TRACE0("/n/nID_EDIT_UNDO/n");
}
BOOLCMenuTestDlg:
:
OnCommand(WPARAMwParam,LPARAMlParam)
{
wchar_tbuffer_format[128]={0};
UINTuMsg=LOWORD(wParam);
if(uMsg>=ID_MENUID_FIRST&&uMsg<=ID_MENUID_FIRST+100)
{
swprintf_s(buffer_format,_T("动态菜单命令%i\0"),uMsg);
MessageBox(buffer_format);
}
returnCDialogEx:
:
OnCommand(wParam,lParam);
}
工作区(用户区)右键菜单:
voidCMenuTestDlg:
:
OnRButtonDown(UINTnFlags,CPointpoint)
{
CMenumenu;
menu.LoadMenu(IDR_POPUP_EDIT);
CMenu*pPopUp=menu.GetSubMenu(0);//获取菜单的第一个子菜单,序号为0
ClientToScreen(&point);//坐标转换
pPopUp->TrackPopupMenu(TPM_LEFTALIGN|TPM_TOPALIGN,point.x,point.y,this);
CDialogEx:
:
OnLButtonDown(nFlags,point);
}
控件右键快捷菜单:
BOOLCMenuTestDlg:
:
OnSetCursor(CWnd*pWnd,UINTnHitTest,UINTmessage)
{
//控件右键快捷菜单
CPointpoint;
CMenumenu;
//HWNDhHnd=GetDlgItem(IDB_BITMAP1)->GetSafeHwnd();
//if(pWnd==GetDlgItem(IDB_BITMAP1))//有问题,需调试
if(message==WM_RBUTTONDOWN)
{
menu.LoadMenu(IDR_POPUP_EDIT);
GetCursorPos(&point);
//ClientToScreen(&point);//坐标转换
CMenu*pPopUp=menu.GetSubMenu(0);//获取菜单的第一个子菜单,序号为0
pPopUp->TrackPopupMenu(TPM_LEFTALIGN|TPM_TOPALIGN,point.x,point.y,this);
}
returnCDialogEx:
:
OnSetCursor(pWnd,nHitTest,message);
}
18、实例,句柄HWND,窗口类CWnd,对象
CWnd的成员:
m_pMainWnd
⏹获取窗口句柄
●获取自身窗口句柄
HWNDhWnd=AfxGetMainWnd()->m_hWnd;
●获取父窗口Z序顶部的子窗口句柄
HWNDGetTopWindow(HWNDhWnd);
如果hWnd为NULL,返回Z序顶部的窗口句柄。
如果指定的窗口无子窗口,返回值为NULL。
●获取系统的前台窗口句柄
HWNDGeCWnd*pwndtForegroundWindow(VOID);
●获取当前进程的活动窗口句柄
HWNDGetActiveWindow(VOID);
●获取当前进程的活动窗口句柄
FindWindow(“ExploreWClass”,NULL);//希望找到资源管理器
HWNDhwnd=pwnd->GetSafeHwnd();//得到它的HWND
HWNDhwnd=pwnd->m_hwnd;//得到它的HWND,不建议用
●判断窗口句柄是否存在窗口
BOOLIsWindow(HWNDhWnd);
●判断窗口句柄是否存在窗口
HWNDFindWindow(LPCSTRlpClassName,LPCSTRlpWind
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 开发 技术 总结