windows编程之自己动手写WinMain函数

这是我参考msdn和书本自己写的窗口程序,

WinMain函数式所有windows应用程序的入口,类似C语言里的main函数,其功能是:完成一系列的定义及初始化工作,并产生消息循环。消息循环是整个程序运行的核心 。

WinMain函数主要实现以下功能:

1.注册窗口类,建立窗口,执行其他必要的初始化的操作;

2.进入消息循环,根据从应用程序消息队列接受的消息,调用相应的处理过程;

3.当消息循环检索到WM_QUIT消息时,终止程序运行。

代码如下:

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

LRESULT CALLBACK WndProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);

int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{
	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 = WndProc;
	wndclass.lpszClassName = "我的窗口";
	wndclass.lpszMenuName = NULL;
	wndclass.style = CS_HREDRAW | CS_VREDRAW;
	RegisterClass(&wndclass); //注册窗口类

	HWND hwnd;
	hwnd = CreateWindow("我的窗口", "窗口", WS_OVERLAPPEDWINDOW, 
		0, 0, 640, 480, NULL, NULL, hInstance, NULL);

	ShowWindow(hwnd, SW_SHOWNORMAL);
	UpdateWindow(hwnd);

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

	return 0;
}

LRESULT CALLBACK WndProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
	switch(uMsg)
	{
	case WM_CHAR:
		char strChar[20];
		sprintf(strChar, "char is %d", wParam);
		MessageBox(hwnd, strChar, "window", MB_OK);
		break;

	case WM_LBUTTONDOWN:
		MessageBox(hwnd, "mouse left-click", "window", MB_OK);
		HDC hdc;
		hdc = GetDC(hwnd);
		TextOut(hdc, 0, 50, "hello mouse left-click", strlen("hello mouse left-click"));
		ReleaseDC(hwnd, hdc);
		break;

	case WM_RBUTTONUP:
		MessageBox(hwnd, "release mouse", "window", MB_OK);
		hdc = GetDC(hwnd);
		TextOut(hdc, 0, 80, "hello release mouse", strlen("hello release mouse"));
		ReleaseDC(hwnd, hdc);
		break;

	case WM_CLOSE:
		PostQuitMessage(0);
		break;

	case WM_DESTROY:
		DestroyWindow(hwnd);
	break;

	default:
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
	}

	return 0;
}



总结:

感觉自己动手写窗口是有点难度的,因为写的不多,很多东西没记住,都要自己去查资料。

阅读更多
文章标签: windows
个人分类: windows编程
上一篇游戏盒子接球最终版
下一篇windows编程之简单的画图操作
想对作者说点什么? 我来说一句

自己手写CPU一书配套资源代码

2017年03月25日 41.4MB 下载

自己手写网络爬虫PDF+源码.zip

2014年11月06日 48.93MB 下载

自己手写编译器链接器_源码

2016年10月31日 869KB 下载

自己手写CPUpdf及光盘资源

2018年03月22日 171.26MB 下载

没有更多推荐了,返回首页

关闭
关闭