MFC学习笔记(一)

一:

在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 WINAPI	WndProc(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(HWND	hwnd,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);
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值