// Zuoye1.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "resource.h"
HINSTANCE g_hInst = NULL;
void DrawBmp(HDC hDC){
//第一个参数是 位图资源所在程序句柄
//第二个参数位图的名称
//返回一个资源句柄
HBITMAP hBmp=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP01) );
//获取位图的相关信息
BITMAP bmpinfo={0};
GetObject(hBmp,sizeof(bmpinfo),&bmpinfo);
//创建一个hDC一模一样的DC出来
//现在hBmpDC和hDC一模一样的DC出来
HDC hBmpDC=CreateCompatibleDC(hDC);
HBITMAP hOldBit = (HBITMAP)SelectObject(hBmpDC,hBmp);
//然后把复制出来的DC 在绘制到我们当前DC上面 呈现出来
BitBlt(hDC,100,100,bmpinfo.bmWidth,bmpinfo.bmHeight,hBmpDC,0,0,SRCCOPY);
StretchBlt(hDC,200,100,500,500,hBmpDC,20,20,bmpinfo.bmWidth,bmpinfo.bmHeight,
SRCCOPY);
SelectObject(hBmpDC,hOldBit);
DeleteDC(hBmpDC);
DeleteObject(hBmp);
}
void onPaint(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam){
PAINTSTRUCT ps={0};
HDC hDC=BeginPaint(hWnd,&ps);
//DrawBmp(hDC);
/*switch(g_nDreawType){
//case ID_SETPIXEL:
// DrawPixel(hDC);
// break;
case ID_LOADBIT:
break;
}
*/
DrawBmp(hDC);
EndPaint(hWnd,&ps);
}
void onCreate(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam){
HMENU hMenu=LoadMenu(g_hInst,MAKEINTRESOURCE(IDR_MENU1));
SetMenu(hWnd,hMenu);
}
void onCommand(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam){
/* int nCmdID=LOWORD(wParam);
switch(nCmdID){
case ID_EXIT:
PostQuitMessage(0);
break;
default:
g_nDreawType=nCmdID;
InvalidateRect(hWnd,NULL,true);
//绘制一条直线
}
*/
}
//主窗口的窗口处理函数
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;
//KillTimer(hWnd,1002);
/*case WM_COMMAND:
//onCommand(hWnd, nMsg, wParam, lParam);
break;
case WM_CREATE:
//onCreate(hWnd, nMsg, wParam, lParam);
break;
*/
//传递到子窗体处理消息响应
//return DefFrameProc( hWnd,g_hMDIClient, nMsg, wParam, lParam );
//传递给系统
}
return DefWindowProc( hWnd, nMsg, wParam, lParam );
}
//窗口注册函数
BOOL RegisterWnd( LPSTR pszClassName,int nBrush )
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.style = CS_HREDRAW|CS_VREDRAW;
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.lpfnWndProc= WndProc;
wce.hInstance = g_hInst;
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hbrBackground = HBRUSH(nBrush);
wce.lpszClassName = pszClassName;
wce.lpszMenuName = NULL;
wce.hIconSm = NULL;
ATOM nAtom = RegisterClassEx( &wce );
if( nAtom == 0 )
{
return FALSE;
}
return TRUE;
}
//创建主窗口
HWND CreateWnd( LPSTR pszClassName )
{
HMENU hMenu=LoadMenu(g_hInst,MAKEINTRESOURCE(IDR_MENU1));
HWND hWnd = CreateWindowEx( 0,
pszClassName, "MainWnd",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, hMenu, g_hInst,
NULL );
return hWnd;
}
//消息循环
void Message( )
{
MSG msg = { 0 };
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
//显示窗口
void DisplayWnd( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
g_hInst = hInstance;
RegisterWnd("luoqiang",COLOR_BACKGROUND);
DisplayWnd(CreateWnd("luoqiang"));
Message();
return 0;
}
// Zuoye1.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
HINSTANCE g_hInst = NULL;
void onPaint(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam){
PAINTSTRUCT ps={0};
HDC hDC=BeginPaint(hWnd,&ps);
//Rectangle(hDC,100,100,200,200);
//0.1MM为单位
//Rectangle(hDC,100,-100,200,-200);
//SetMapMode(hDC,nOldMap);
//毫米为单位
//nOldMap=SetMapMode(hDC,MM_HIMETRIC);
//Rectangle(hDC,100,-100,200,-200);
//恢复旧映射模式
//让原本的图像 按照1:10的图像显示 反过来10:1也是可以的 现在就是相当于
//宽是1逻辑单位对应2个像素
int nOldMap=SetMapMode(hDC,MM_ISOTROPIC);
SetViewportExtEx(hDC,10,10,NULL);
SetWindowExtEx(hDC,5,5,NULL);
Rectangle(hDC,100,100,200,200);
SetMapMode(hDC,nOldMap);
EndPaint(hWnd,&ps);
}
//主窗口的窗口处理函数
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;
}
return DefWindowProc( hWnd, nMsg, wParam, lParam );
}
//窗口注册函数
BOOL RegisterWnd( LPSTR pszClassName,int nBrush )
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.style = CS_HREDRAW|CS_VREDRAW;
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.lpfnWndProc= WndProc;
wce.hInstance = g_hInst;
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hbrBackground = HBRUSH(nBrush);
wce.lpszClassName = pszClassName;
wce.lpszMenuName = NULL;
wce.hIconSm = NULL;
ATOM nAtom = RegisterClassEx( &wce );
if( nAtom == 0 )
{
return FALSE;
}
return TRUE;
}
//创建主窗口
HWND CreateWnd( LPSTR pszClassName )
{
HWND hWnd = CreateWindowEx( 0,
pszClassName, "MainWnd",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, NULL, g_hInst,
NULL );
return hWnd;
}
//消息循环
void Message( )
{
MSG msg = { 0 };
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
//显示窗口
void DisplayWnd( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
g_hInst = hInstance;
RegisterWnd("luoqiang",COLOR_BACKGROUND);
DisplayWnd(CreateWnd("luoqiang"));
Message();
return 0;
}