windows编程之helloworld

        在学完c++基础知识后,我试着看了一下windows编程的知识,大学时学过一些基本概念。所以现在学起来不会太费力。这个文章就当做一个入门吧。

        我们做任何系统的开发,都离不开框架,框架都会有一个框架模型。比如现在web领域编程中比较流行的SSH框架,其模型就是MVC架构,我们在框架的基础上编程,无外乎是两点,一点是框架的API,一点是在框架特定的接口下编程。我们主要做这两点,其他都由框架来调用,这就是IOC和AOP中的原理:“你不用来找我,我来找你”。

        windows也不例外,我们也完全可以理解为一个框架,只是这个框架太复杂了,模型太多了,大笑。但是有一个最最基础的模型,就是消息驱动模型。windows应用程序的处理过程是这样的:当操作鼠标键盘或其他外设时,windows会自动产生一个对应的消息,将其消息放置在应用程序的消息队列中,应用程序将取出消息,并对消息作出响应,在作出响应的时候,应用程序会调用windows的API来实现特定的功能。这就是一个基本的过程了。

        说这么多,我们直接先写个例子吧,作为一个helloworld的实例。

        1 新建Win32 Application的空项目,然后再新建一个cpp源文件,源文件中包含的代码如下:

 

#include <windows.h>
#include <stdio.h>

LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
	WNDCLASS wndclass;
	wndclass.cbClsExtra = 0;
	wndclass.cbWndExtra = 0;
	wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
	wndclass.hCursor = LoadCursor(NULL,IDC_ARROW );
	wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
	wndclass.hInstance = hInstance;
	wndclass.lpfnWndProc = WinProc;
	wndclass.lpszClassName = "bplead";
	wndclass.lpszMenuName = NULL;
	wndclass.style = CS_HREDRAW | CS_VREDRAW;
	RegisterClass(&wndclass);

	HWND hwnd;
	hwnd = CreateWindow("bplead","bplead",WS_OVERLAPPEDWINDOW,0,0,800,600,NULL,NULL,hInstance,NULL);
	ShowWindow(hwnd, SW_SHOWNORMAL);
	UpdateWindow(hwnd);


	MSG msg;
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return msg.wParam;
}

LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	switch(uMsg)
	{
		case WM_CHAR:
			char szChar[20];
			sprintf(szChar, "char code is %d", wParam);
			MessageBox(hwnd, szChar, "char", 0);
			break;
		/**case WM_LBUTTONDOWN:
			break;**/
		case WM_PAINT:
			hdc = BeginPaint(hwnd, &ps); 
			TextOut(hdc, 0, 0, "HelloWorld!",11);
			EndPaint(hwnd, &ps); 
			break;
		case WM_CLOSE:
			if(IDYES == MessageBox(hwnd,"close window?","",MB_YESNO))
				DestroyWindow(hwnd);
			break;
		case WM_DESTROY:
				PostQuitMessage(0);
			break;
		default:
			return DefWindowProc(hwnd, uMsg, wParam, lParam);
	}
	return 0;
}
        2 看看运行效果:

                


        3 HelloWorld的例子就完成了,虽然复制粘贴代码很简单,但是里面的知识很多。我想放在下一篇文章里面详细讲解。一篇文章说的多了,是个很恐怖的事情。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值