Windows编程基础 第八章 位图 坐标系映射模式 文字和字体 对话框

本文是截图:Windows编程基础 第八章   位图  坐标系映射模式   文字和字体  对话框

原文pdf文件下载地址是:http://yunpan.cn/cdeWFvDiwZeMy  访问密码 a9de










//程序用来演示位图的加载和使用

#include "stdafx.h"
#include "resource.h"
#include "windows11.h"

HINSTANCE g_hInst = NULL;
int g_type=-1;
void DrawBmp( HDC hDC )
{	//加载位图资源
	HBITMAP hBmp = LoadBitmap( g_hInst, 
		MAKEINTRESOURCE(IDB_BITMAP1) );
	//获取位图的相关信息
	BITMAP bmpInfo = { 0 };
	GetObject( hBmp, sizeof(bmpInfo), &bmpInfo );
	//创建放置位图的DC
	HDC hBmpDC = CreateCompatibleDC( hDC );
	//将位图放入hBmpDC
	HBITMAP hOldBmp = (HBITMAP)
		SelectObject( hBmpDC, hBmp );
	//绘制位图
	BitBlt( hDC, 100, 100, bmpInfo.bmWidth, 
		bmpInfo.bmHeight, hBmpDC, 
		0, 0, SRCCOPY );
	//取出位图
	SelectObject( hBmpDC, hOldBmp );
	//删除DC
	DeleteDC( hBmpDC );
	//删除位图
	DeleteObject( hBmp );
}

void DrawBmpStretch( HDC hDC )
{	//加载位图资源
	HBITMAP hBmp = LoadBitmap( g_hInst, 
		MAKEINTRESOURCE(IDB_BITMAP1) );
	//获取位图的相关信息
	BITMAP bmpInfo = { 0 };
	GetObject( hBmp, sizeof(bmpInfo), &bmpInfo );
	//创建放置位图的DC
	HDC hBmpDC = CreateCompatibleDC( hDC );
	//将位图放入hBmpDC
	HBITMAP hOldBmp = (HBITMAP)
		SelectObject( hBmpDC, hBmp );
	//拉伸绘制
	StretchBlt( hDC, 200, 100, 300, 300, 
		hBmpDC, 0, 0, bmpInfo.bmWidth, 
		bmpInfo.bmHeight, SRCCOPY );
	//取出位图
	SelectObject( hBmpDC, hOldBmp );
	//删除DC
	DeleteDC( hBmpDC );
	//删除位图
	DeleteObject( hBmp );
}

void OnPaint( HWND hWnd, UINT nMsg,
	WPARAM wParam, LPARAM lParam )
{
	PAINTSTRUCT ps = { 0 };
	HDC hDC = BeginPaint( hWnd, &ps );
	if (g_type==0)
	{
		DrawBmp(hDC);
	} 
	else
		if(g_type==1)
	{
		DrawBmpStretch(hDC);
	}


	EndPaint( hWnd, &ps );
}


VOID OnCommand( HWND   hWnd, UINT   nMsg,WPARAM wParam,	LPARAM lParam )
{
	int nCmd=LOWORD(wParam);
	switch(nCmd)
	{
	case ID_32771:
		g_type=0;
		InvalidateRect(hWnd,NULL,TRUE);
		break;
	case ID_32772:
		g_type=1;
		InvalidateRect(hWnd,NULL,TRUE);
		break;
	case IDM_EXIT:
		PostQuitMessage(0);
		break;
	}
	
}
LRESULT CALLBACK WndProc( HWND   hWnd, 
	UINT   nMsg,
	WPARAM wParam,
	LPARAM lParam )
{
	switch( nMsg )
	{
	case WM_PAINT:
		OnPaint( hWnd, nMsg, wParam, lParam );
		break;
	case WM_DESTROY:
		PostQuitMessage( 0 );
		return 0;
	case  WM_COMMAND:
		OnCommand(hWnd,nMsg,wParam,lParam);
		break;
	}
	return DefWindowProc( hWnd, nMsg,
		wParam, lParam );
}

BOOL RegisterWnd( TCHAR * pszClassName )
{
	WNDCLASSEX wce = { 0 };
	wce.cbSize        = sizeof( wce );
	wce.cbClsExtra    = 0;
	wce.cbWndExtra    = 0;
	wce.hbrBackground = HBRUSH(COLOR_WINDOW);
	wce.hCursor       = NULL;
	wce.hIcon         = NULL;
	wce.hIconSm       = NULL;
	wce.hInstance     = g_hInst;
	wce.lpfnWndProc   = WndProc;
	wce.lpszClassName = pszClassName;
	wce.lpszMenuName  = NULL;
	wce.style         = CS_HREDRAW|CS_VREDRAW;

	ATOM nAtom = RegisterClassEx( &wce );
	if( 0 ==  nAtom )
	{
		return FALSE;
	}

	return TRUE;
}

HWND CreateWnd( TCHAR * pszClassName )
{
	HMENU hMenu = 
		LoadMenu( g_hInst, MAKEINTRESOURCE(IDC_WINDOWS11) );
	HWND hWnd = CreateWindowEx( 0,
		pszClassName, L"MyWnd", 
		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
		CW_USEDEFAULT, CW_USEDEFAULT,
		CW_USEDEFAULT, NULL, hMenu, g_hInst,
		NULL );
	return hWnd;
}

void DisplayWnd( HWND hWnd )
{
	ShowWindow( hWnd, SW_SHOW );
	UpdateWindow( hWnd );
}

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

int APIENTRY WinMain(HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR     lpCmdLine,
	int       nCmdShow)
{
	g_hInst = hInstance;
	RegisterWnd(L"MYWND" );
	HWND hWnd = CreateWnd(L"MYWND" );
	DisplayWnd( hWnd );
	Message( );
	return 0;
}



//本程序用来演示坐标映射和字体
#include "windows12.h"
#include "stdafx.h"
#include "resource.h"
#include "stdio.h"
#include "windows.h"

HINSTANCE g_hInst=NULL;

VOID OnCommand(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	int nCmd=LOWORD(wParam);//取得菜单项ID
	
	switch(nCmd)
	{
	case IDM_EXIT:
		PostQuitMessage(0);
		break;
	}
}
/*
//这个Onpaint()函数用来演示坐标的映射
VOID OnPaint(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	PAINTSTRUCT ps={0};
	HDC hDC=BeginPaint(hWnd,&ps);
	Rectangle(hDC,100,100,200,200);
	int OldMapMethod =SetMapMode(hDC,MM_LOMETRIC);
	Rectangle(hDC,300,-300,200,-200);
	SetMapMode(hDC,MM_HIMETRIC);
	Rectangle(hDC,100,-300,200,-200);
	SetMapMode(hDC,OldMapMethod);
	Rectangle(hDC,100,300,200,200);
	SetViewportExtEx(hDC,6,6,NULL);
	SetWindowExtEx(hDC,2,2,NULL);
	Rectangle(hDC,300,300,400,400);
	EndPaint(hWnd,&ps);
}
*/
//这个OnPaint()函数用来演示字体的使用
VOID OnPaint(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	PAINTSTRUCT ps={0};
	HDC hDC=BeginPaint(hWnd,&ps);
	//设置文字颜色
	COLORREF nColor=SetTextColor(hDC,RGB(255,0,0));
	//设置背景颜色
	SetBkColor(hDC,RGB(0,255,255));
	//创建字体
	HFONT hFont=CreateFont(300,30,100,0,FW_BLACK,TRUE,TRUE,TRUE,DEFAULT_CHARSET,0,0,0,0,TEXT("宋体"));
	//把字加入到DC中
	HFONT hOldFont=(HFONT)SelectObject(hDC,hFont);
	//输出文字
	TCHAR szText1[100]=TEXT("hello  text,long long  long  long ");
	TextOut(hDC,100,100,szText1,_tcslen(szText1));
	//设置背景模式
	SetBkMode(hDC,TRANSPARENT);
	RECT rect={0};
	rect.left=500;
	rect.top=520;
	rect.right=700;
	rect.bottom=700;
	Rectangle(hDC,rect.left,rect.top,rect.right,rect.bottom);
	DrawText(hDC,szText1,_tcslen(szText1),&rect,DT_CENTER|DT_WORDBREAK);
	TCHAR  szText[100]=TEXT("E你xtTex好!");
	INT nText[10]={30,0,10,100,50,60,70,80,80,80};
	ExtTextOut(hDC,500,500,ETO_OPAQUE,NULL,szText,_tcslen(szText),NULL);
	SetTextColor(hDC,nColor);
	SelectObject(hDC,hOldFont);
	DeleteObject(hFont);
	EndPaint(hWnd,&ps);
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{

	switch(uMsg)
	{
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_COMMAND://用来处理菜单消息
		OnCommand(hWnd,uMsg,wParam,lParam);
		break;
	case WM_PAINT:
		OnPaint(hWnd,uMsg,wParam,lParam);
		break;

	}
	return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

BOOL   RegisterWnd(TCHAR * pszClassName	)
{
	WNDCLASSEX  wce={0};
	wce.cbClsExtra=0;
	wce.cbSize=sizeof(wce);
	wce.cbWndExtra=0;
	wce.hbrBackground=HBRUSH(COLOR_WINDOW+1);//GetStockBrush(WHITE_BRUSH);
	wce.hCursor=NULL;
	wce.hIcon=NULL;
	wce.hIconSm=NULL;
	wce.hInstance=g_hInst;
	wce.lpfnWndProc=WndProc;
	wce.lpszClassName=pszClassName;
	wce.lpszMenuName=NULL;
	wce.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;

	ATOM   result=RegisterClassEx(&wce);
	if (result==0)
	{
		MessageBox(NULL,TEXT("窗口类注册失败!"),TEXT("窗口类注册失败!"),MB_OK);
		return FALSE;
	}
	return TRUE;
}

VOID  DisplayWindow(HWND hWnd)    
{
	ShowWindow(hWnd,SW_SHOW);
	UpdateWindow(hWnd);
}

VOID Message(HWND hWnd)
{
	HACCEL hAccel=LoadAccelerators(g_hInst,MAKEINTRESOURCE(IDC_WINDOWS12));
	MSG  msg={0};
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateAccelerator(hWnd,hAccel,&msg);
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
}

HWND  CreateMyWindow(TCHAR *  pszClassName)
{
	//加载字符串资源
	TCHAR szText[100]=TEXT("");
	LoadString(g_hInst,IDS_STRINGMain,szText,100);
	//加载菜单资源
	HMENU hMenu=LoadMenu(g_hInst,MAKEINTRESOURCE(IDC_WINDOWS12));
	HWND hWndNew=CreateWindowEx(0,pszClassName,szText,WS_OVERLAPPEDWINDOW|WS_THICKFRAME,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,hMenu,g_hInst,NULL);
	return hWndNew;
}


INT WINAPI  WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd )
{

	RegisterWnd(TEXT("MyWnd"));
	HWND hWnd=CreateMyWindow(TEXT("MyWnd"));
	DisplayWindow(hWnd);
	Message(hWnd);
	return TRUE;
}


//本程序用来演示一个有模式对话框的创建和关闭
#include "windows12.h"
#include "stdafx.h"
#include "resource.h"
#include "stdio.h"
#include "windows.h"

HINSTANCE g_hInst=NULL;

BOOL CALLBACK  DialogProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_SYSCOMMAND:
		switch(wParam)
		{
		case  SC_CLOSE:
			EndDialog(hWnd,1);
		break;
		}
	}
	return 0;
}

VOID setting(HWND hWnd)
{
	int result=DialogBox(g_hInst,MAKEINTRESOURCE(IDD_DIALOG1),hWnd,DialogProc);
	if (result==1)
	{
		MessageBox(NULL,TEXT("应用设置"),TEXT("设置"),MB_OK);
	}
	else
	{
		MessageBox(NULL,TEXT("取消设置"),TEXT("设置"),MB_OK);
	}
}

VOID OnCommand(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	int nCmd=LOWORD(wParam);//取得菜单项ID
	
	switch(nCmd)
	{
	case IDM_EXIT:
		PostQuitMessage(0);
		break;
	case ID_DIALOGBOX:
		setting(hWnd);
		break;
	}
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{

	switch(uMsg)
	{
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_COMMAND://用来处理菜单消息
		OnCommand(hWnd,uMsg,wParam,lParam);
		break;
	

	}
	return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

BOOL   RegisterWnd(TCHAR * pszClassName	)
{
	WNDCLASSEX  wce={0};
	wce.cbClsExtra=0;
	wce.cbSize=sizeof(wce);
	wce.cbWndExtra=0;
	wce.hbrBackground=HBRUSH(COLOR_WINDOW+1);//GetStockBrush(WHITE_BRUSH);
	wce.hCursor=NULL;
	wce.hIcon=NULL;
	wce.hIconSm=NULL;
	wce.hInstance=g_hInst;
	wce.lpfnWndProc=WndProc;
	wce.lpszClassName=pszClassName;
	wce.lpszMenuName=NULL;
	wce.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;

	ATOM   result=RegisterClassEx(&wce);
	if (result==0)
	{
		MessageBox(NULL,TEXT("窗口类注册失败!"),TEXT("窗口类注册失败!"),MB_OK);
		return FALSE;
	}
	return TRUE;
}

VOID  DisplayWindow(HWND hWnd)    
{
	ShowWindow(hWnd,SW_SHOW);
	UpdateWindow(hWnd);
}

VOID Message(HWND hWnd)
{
	HACCEL hAccel=LoadAccelerators(g_hInst,MAKEINTRESOURCE(IDC_WINDOWS12));
	MSG  msg={0};
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateAccelerator(hWnd,hAccel,&msg);
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
}

HWND  CreateMyWindow(TCHAR *  pszClassName)
{
	//加载字符串资源
	TCHAR szText[100]=TEXT("");
	LoadString(g_hInst,IDS_STRINGMain,szText,100);
	//加载菜单资源
	HMENU hMenu=LoadMenu(g_hInst,MAKEINTRESOURCE(IDC_WINDOWS12));
	HWND hWndNew=CreateWindowEx(0,pszClassName,szText,WS_OVERLAPPEDWINDOW|WS_THICKFRAME,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,hMenu,g_hInst,NULL);
	return hWndNew;
}


INT WINAPI  WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd )
{

	RegisterWnd(TEXT("MyWnd"));
	HWND hWnd=CreateMyWindow(TEXT("MyWnd"));
	DisplayWindow(hWnd);
	Message(hWnd);
	return TRUE;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值