利用Windows绘制界面并且编写窗口过程函数

原创 2015年07月09日 17:01:45

这篇blog主要是将的是如何实现窗口过程编程。

即通过窗口过程函数的编写来实现其如何处理消息的方式。


例如:

#include<windows.h>
#include <stdio.h>
/*LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
	return	DefWindowProc( hWnd,  uMsg,  wParam, lParam);
}
*/
LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
	switch(uMsg){
	case WM_CHAR:   //按下键盘按键会产生以下函数的调用
		char szchar[20];
		sprintf_s (szchar,20,"char is %d",wParam);
		MessageBoxA(hWnd, szchar, "Keyboard",MB_OK);
		break;
	case WM_LBUTTONDOWN:  //按下鼠标后会产生一下函数的调用
		MessageBoxA(hWnd, "Mouse clicked", "Mouse",MB_OK);
		HDC hdc;
		hdc = GetDC(hWnd);
		TextOutA(hdc,0,0,"You clicked the left button",strlen("You clicked the left button"));
		ReleaseDC(hWnd,hdc);
		break;
	case WM_PAINT:      //移动窗口后会产生一下函数的调用
		HDC hDC;
		PAINTSTRUCT ps;
		hDC = BeginPaint(hWnd,&ps);
		TextOutA(hDC, 0, 0, "http://www.baidu.com",strlen("http://www.baidu.com"));
		EndPaint(hWnd,&ps);
		break;
	case WM_CLOSE:    //点击X按钮关闭程序,同时产生WM_DESTROY来引发WM_DESTROY函数的执行
		if(IDYES == MessageBoxA(hWnd,"rellay over?", "message", MB_YESNO)){
			DestroyWindow(hWnd);
			PostQuitMessage(0);
		}
		break;
	case WM_DESTROY:
		MessageBoxA(hWnd,"Destroy","Destroy",MB_OK);
		PostQuitMessage(0);
		break;
	default:  //默认返回类型,如果忘记加return则 生成的wnidows窗口不会出现
		return DefWindowProc( hWnd,  uMsg,  wParam, lParam);
	}
	return 0;
}
int WINAPI WinMain(
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine, 
	int nCmdShow){
		HWND hWnd;
		MSG uMsg;
		WNDCLASS wc;
		wc.style = CS_HREDRAW | CS_VREDRAW;
		wc.hCursor = NULL;
		wc.hIcon = NULL;
		wc.lpfnWndProc = (WNDPROC)WinProc;
		wc.cbClsExtra = 0;
		wc.cbWndExtra = 0;
		wc.hInstance = hInstance;
		wc.hbrBackground = (HBRUSH)COLOR_GRAYTEXT+ 1;	
		wc.lpszMenuName = NULL;
		wc.lpszClassName = TEXT("Main");
		RegisterClass(&wc);
		hWnd = CreateWindowA("Main", "WINDOWS",WS_OVERLAPPEDWINDOW, 0, 0, 500, 500, NULL, NULL, hInstance, NULL);
		ShowWindow(hWnd, SW_SHOW);	
		UpdateWindow(hWnd);
		while(GetMessage(&uMsg, NULL, 0, 0)){
			TranslateMessage(&uMsg);
			DispatchMessage(&uMsg);		
		}
		return 0;
}



相关文章推荐

跟我一起学Windows界面封装(四) 之 窗口过程函数(下) -- 奇妙的Thunk技术

本文是笔者参考多方资料,同时研究ATL源码后写的一些心得,因为在看源码时会出现很多点不懂,因此文章主要从这些小点出发而撰写,可能外人看来会有些语无伦次或者不够流畅,请见谅,不是计算机科班出身,才疏学浅...

Windows编程文章翻译(1-3rd)编写WindowProc函数(窗口过程)

父文章:你的第一个Windows桌面应用程序 上一篇文章:窗口消息 原文链接:Writing the Window Procedure前注:在文章中,我们一直说窗口过程为WindowProc函数,...

windows(4)修改窗口过程函数的机制和论证

[摘要] 这节课详细解释系统如何修改窗口类这个机制,并用代码去验证这个机制,提供了两份验证的代码留给大家验证。     修改窗口类的窗口过程,能够让所有用这个窗口类来创建的窗口都改变了窗口过程吗?...

windows编程学习笔记(2)窗口过程函数

一.窗口过程函数

编写窗口过程函数

  • 2011年09月19日 09:11
  • 8KB
  • 下载

IOS基本界面元素window(窗口)\视图(view)介绍及生命周期和加载过程等

IOS基本界面元素:     要在屏幕上显示内容首先要创建一个窗口承载内容,要创建一个窗口,需要一个边框(frame),含有边框信息的底层 结构就CGRect。每个能够在屏幕上显示自己的对象都有...

SDL2和glfw库windows下创建到界面窗口中的简单方法

SDL2和glfw库windows下创建到界面窗口中的简单方法:网上查了一天的资料,有介绍如何修改源代码的,操作很复杂。最简单的方法,就是通过wglGetCurrentDC()这个函数得到当前SDL2...

跟我一起学Windows界面封装(二) 之 前奏篇:显示第一个窗口

知道了如何用基本的windowsAPI创建一个窗口,但现实中我们不可能完全使用这种形式来完成一个复杂的窗口程序。为此,我们必须进行一定的封装。          封装必须要完成几件基本的事情: (...

[源代码]WIN32 SDK界面研究<1>:模仿Windows命令行或telnet客户端的窗口

前言: MFC丰富的控件对于一般程序员来说可以快速构建自己的程序,把开发的重心放在应用的功能实现上。但是程序界面问题一直是MFC程序的软肋,相信用过MFC的人相信都没有少受MFC自绘界面的痛苦。自从...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用Windows绘制界面并且编写窗口过程函数
举报原因:
原因补充:

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