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

原创 2013年12月03日 17:57:37

这是我参考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;
}



总结:

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

WinMain()主函数

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, ...

WinMain的基本流程

原文出处:http://blog.csdn.net/tcjiaan/article/details/8497535   一、WinMain入口点 我们在学习标准C++的时候,都知道每...
  • yaked
  • yaked
  • 2016年08月29日 17:14
  • 2825

WinMain函数

WinMain函数      WinMain函数作为Win32程序的入口点被系统调用。      int WINAPI WinMain(                          HIN...

WinMain函数简介

Winmain是windows平台下应用程序的入口函数。 程序实现的步骤为:Winmain函数的定义->创建一个窗口->进行消息的循环->编写窗口过程函数。 形式为: Int WINAPI Wi...

WinMain()

1、WinMain()函数        首先,必须要声明一个WinMain()函数(为了简明起见,这里先不讨论_tWinMain这个宏,也不考虑Unicode的问题),它的原型在Windows.h中...

从WinMain开始

本文应一个初学Windows程序设计的朋友而作。目录 抽象渗漏法则(摘自Joel) 针对Windows GUI编程的封装 只用API函数创建GUI程序 Wi...
  • SeaWave
  • SeaWave
  • 2006年10月18日 00:08
  • 34489

WinMain函数

在基于Win32的应用程序中,当系统初始化的时候,需要找到一个入口点,从而执行相应的应用程序。这同Win32 Console Application(Win32控制应用程序)中的main入口函数一样,...
  • tnt32
  • tnt32
  • 2012年11月18日 07:02
  • 447

从Win32程序的主函数WinMain中获取命令行参数

在标准C或者Win32控制台程序的main函数中,它们都有两个参数:"argc" 和 "argv",如下所示: int main(int argc, char * argv[]) 这些参数...
  • ypist
  • ypist
  • 2012年11月01日 19:51
  • 6142

主函数 main WinMain _tmain _tWinMain 的区别

主函数 main WinMain _tmain _tWinMain 的区别 main是C/C++的标准入口函数名 WinMain是windows API窗体程序的入口函数。(int...

《实用OpenCV》<四> 图像和GUI窗口的基本操作(3)

ROI:从图像裁剪矩形区域 图像的兴趣区 兴趣区其实就如字面意思一样,是我们对图像特别感兴趣和愿意处理的一块区域。比如图片很大,大部分区域都不是我们想要用的,或者处理过程如果基于...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:windows编程之自己动手写WinMain函数
举报原因:
原因补充:

(最多只允许输入30个字)