MFC学习笔记(一)
来源:互联网 发布:无法打开数据库 编辑:程序博客网 时间:2024/04/29 13:10
一:
在Win32应用程序中,不用MFC类,如何输出整数
方法一(无效的方法):
MessageBoxA(hwnd,""+nCmdShow,"Test",MB_OK);
方法二(可行):
TCHAR szBuffer[20];
wsprintf(szBuffer, TEXT("大小为: %d"), nCmdShow);
MessageBox(NULL, szBuffer, L"Test", MB_OK);
在MFC中的方法是:
CString str;
str.Format(L"%d",nCmdShow);
MessageBox(str);
二:WinMain函数解析
WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpszCmdLine,int nCmdShow)中的参数hInstance,hPreInstance,nCmdShow是通过系统传入的,lpszCmdLine可以通过命令行传入或者在:项目->属性->调试->命令参数中设置传入。系统传给nCmdShow的值为10,对应窗口显示属性SW_SHOWDEFAULT。
其他窗口显示属性值有:
#define SW_HIDE 0
#define SW_SHOWNORMAL 1
#define SW_NORMAL 1
#define SW_SHOWMINIMIZED 2
#define SW_SHOWMAXIMIZED 3
#define SW_MAXIMIZE 3
#define SW_SHOWNOACTIVATE 4
#define SW_SHOW 5
#define SW_MINIMIZE 6
#define SW_SHOWMINNOACTIVE 7
#define SW_SHOWNA 8
#define SW_RESTORE 9
#define SW_SHOWDEFAULT 10
#define SW_FORCEMINIMIZE 11
#define SW_MAX 11
三:窗口过程函数解析
LONG CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam, LPARAM lParam)
该函数的参数都是通过消息结构msg获得的。MSG的定义如下:
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
#ifdef _MAC
DWORD lPrivate;
#endif
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;
每个消息都记录了相关的窗口hwnd,消息的ID(message)以及参数wParam和lParam等,窗口过程函数的参数就是通过MSG传入的。
测试代码:
//#include "AFX.h"#include <windows.h>LONG WINAPIWndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,\ LPSTR lpszCmdLine,int nCmdShow){WNDCLASS wc;HWND hwnd;MSG msg;wc.style=0;wc.lpfnWndProc=(WNDPROC)WndProc;wc.cbClsExtra=0;wc.cbWndExtra=0;wc.hInstance=hInstance;wc.hIcon=LoadIcon(NULL,IDI_WINLOGO);wc.hCursor=LoadCursor(NULL,IDC_ARROW);wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);wc.lpszMenuName=NULL;wc.lpszClassName=L"MyWndClass";RegisterClass(&wc);hwnd=CreateWindow(L"MyWndClass",L"SDK Application",WS_OVERLAPPEDWINDOW,\CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,\HWND_DESKTOP,NULL,hInstance,NULL);//MessageBoxA(hwnd,""+nCmdShow,"Test",MB_OK); //无效//测试nCmdShow的值和整数如何输出TCHAR szBuffer[20];wsprintf(szBuffer, TEXT("大小为: %d"), nCmdShow);MessageBox(NULL, szBuffer, L"Test", MB_OK);//测试lpszCmdLine参数的传入//MessageBoxA(NULL, lpszCmdLine, "Test", MB_OK);ShowWindow(hwnd,SW_SHOWDEFAULT);UpdateWindow(hwnd);while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}LONG CALLBACK WndProc(HWNDhwnd,UINT message,WPARAM wParam,\ LPARAM lParam){PAINTSTRUCT ps;HDC hdc;switch (message){case WM_PAINT:hdc=BeginPaint(hwnd,&ps);Ellipse(hdc,0,0,200,100);EndPaint(hwnd,&ps);return 0;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hwnd,message,wParam,lParam);}
- MFC学习笔记一
- MFC学习笔记(一)
- MFC学习笔记(一)
- MFC学习笔记一
- MFC学习笔记(一)
- MFC学习笔记一
- MFC学习笔记CDocTemplate(一)
- VC++/MFC学习笔记(一)
- 深入浅出MFC学习笔记(一)
- MFC学习过程笔记一
- MFC 学习笔记(一)
- C++ MFC学习笔记一
- MFC学习笔记(一)
- <mfc深入浅出>学习笔记一
- MFC学习笔记(一)
- MFC学习笔记(一)
- MFC学习笔记之简单绘图一
- VC|MFC学习笔记(一)
- 04.黑马程序员-NSSet、NSMutableSet
- freemarker报错之十
- Palindrome Partitioning II
- Java流
- scala akka 修炼之路2(文件操作)
- MFC学习笔记(一)
- IOS_Cocos2D_间隔动作_帧动画_纹理相册_进度条_瞬时动作_SpriteBatchNode
- 【Java】【反射】
- mysql基本操作
- JAVA学习笔记之二进制、十进制
- 再次开始(一)
- linux驱动初始化dma功能
- Jquery01项目搭建
- android 部分原生Adapter简介之ArrayAdapter