MFC学习笔记.day01续-调试MessageBox,注册窗口,创建窗口,显示,更新,消息循环,回调函数
2015-07-23 10:15
495 查看
MFC调试
在MFC 中程序繁杂,很容易出错。有时间断点不一定能直观的显示程序执行的情况。所以,我们可以再函数中任意一行添加MessageBox(_T("xxxxxxxxxxxxxxxxx"));
或者:
MassageBox(_T("程序执行到此处"));
两个函数可以直接生成指定风格的消息对话框,而不需要我们在每次使用的时候都要去创建对话框资源和生成对话框类等。这两个函数就是CWnd类的成员函数MessageBox()和全局函数AfxMessageBox()。
int MessageBox( HWND hWnd, //Handle to the owner window of the message box to be created. //If this parameter is NULL, the message box has no owner window. LPCTSTR lpText, //Pointer to a null-terminated string that contains the message to be displayed LPCTSTR lpszCaption = NULL, //Pointer to a null-terminated string that contains the dialog box title. If this parameter is NULL, the default title Error is used. UINT nType = MB_OK );
nType的取值可以是下面两个表中任取一个值,也可以是各取一个值的任意组合。即可以指定一个对话框类型,也可以指定一个对话框图标,还可以两者都设定。
nType 取值 参数说明
MB_ABORTRETRY 有“终止”、“重试”和“忽略”按钮
MB_OK 有“确定”按钮
MB_OKCANCEL 有“确定”和“取消”按钮
MB_RETRYCANCEL 有“重试”和“取消”按钮
MB_YESNO 有“是”和“否”按钮
MB_YESNOCANCEL 有“是”、“否”和“取消”按钮
对话框类型表
nType 取值 显示图标
MB_ICONEXCLAMTION
MB_ICONWARNING
MB_ICONASTERISK
MB_ICONINFORMATION
MB_ICONQUESTION
MB_ICONHAND
MB_ICONSTOP
MB_ICONERROR
#####Example Visual C++ Copy Code void CMainFrame::OnDisplayErrorMessage() { // This displays a message box with the title "Error" // and the message "Help, Something went wrong." // The error icon is displayed in the message box, along with // an OK button. MessageBox(_T("Help, Something went wrong."), _T("Error"), MB_ICONERROR | MB_OK); }
注册窗口类:RegisterClass
ATOM RegisterClass( CONST WNDCLASS *lpWndClass // class data 窗口类结构体的指针 );
创建窗口——CreateWindow
① 定义一个句HWND hwnd
② 创建窗口
Hwnd=CreateWindow()
HWND CreateWindow( LPCTSTR lpClassName, // registered class name 一定要是已经注册的类名 LPCTSTR lpWindowName,// window name 窗口的名字 DWORD dwStyle, // window style 窗口的类型 int x, // horizontal position of window 窗口显示的时候的左上角的x的坐标值 int y, // vertical position of window 窗口显示的时候的左上角的y的坐标值 int nWidth, // window width 窗口的大小的宽度 int nHeight, // window height 窗口大小的高度 HWND hWndParent, // handle to parent or owner window 指示的副窗口的句柄 HMENU hMenu, // menu handle or child identifier菜单的句柄 HINSTANCE hInstance, // handle to application instance 当前应用程序的实例的句柄 LPVOID lpParam // window-creation data 窗口创建的附加参数 );
③ 显示窗口 ——ShowWindow
BOOL ShowWindow(HWND hWnd, // handle to window 要显示的窗口的指针,显示的是哪一个窗口
int nCmdShow // show state 要显示的窗口的状态
);
④ 更新窗口 ——UpdataWindow
⑤ 消息循环
MSG msg;While (GetMessage(&msg,NULL,0,0))这里用GetMessage从我们的消息的队列中取出一条消息
当执行PostQuitmessage时会产生Wm_quit消息,此时消息循环跳出,结束消息循环
{
TranslateMessage(&msg); 将Wm-Keydown 和 keyup 的消息转化为WM-CHAR消息,并且将转化后的新消息投递到我们的消息队列当中
DispatchMessage(&msg);将收到的消息传到我们的系统,系统来调用我们窗口的回调函数,交由回调函数来处理
}
备注: DispatchMessage是将消息分发给操作系统,然后操作系统再去调用回调函数,由回调函数来进行处理。
回调函数:
LRESULT CALLBACK WindowProc( HWND hwnd, // handle to window 窗口的句柄 UINT uMsg, // message identifier 消息的标识 WPARAM wParam, // first message parameter 第一个消息的附加参数 LPARAM lParam // second message parameter 第二个消息的附加参数 );
说明:这个函数的形式不能变,但是可以改变函数名。
相关文章推荐
- 学习笔记-DOM解析和sax解析区别
- 越狱设备看不到系统文件夹
- 部署Eclipse中的Web项目到Tomcat服务器运行
- 单例设计模式
- 【Guitar Pro 6 中文破解版】完整安装教程+下载地址
- 插入排序
- servelet 2.4 +eclipse3.6+struts2.3.16:Can not find the tag library descriptor for "/struts- tags" 2
- 无法确定 <T>T 的类型参数 ;对于上限为int,java.lang.Object 的类型变量 T,不存在唯一最大实例
- 何时必须使用初始化列表
- “百城千校,百万英才”在杭隆重举行
- Visual Studio Code初探
- base64转码上传服务器
- 常用的缓冲技术有哪几种?
- iMac一体机安装苹果和Win7双系统
- J - A Bug's Life - poj2492
- soapui 不同版本之间切换excel
- JDBC连接oracle数据库
- java synchronized详解
- Classical test theory--经典测验理论
- cocos2dx 常用宏和函数