LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
int iMapMode;
static int cxClient, cyClient;
switch (message)
{
case WM_SIZE:
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
break;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
//创建自定义映射 iMapMode = GetMapMode(hdc);
SetMapMode(hdc, MM_ISOTROPIC); //各向同性(会去干预映射过程,将多余裁剪)
//SetMapMode(hdc, MM_ANISOTROPIC); //各向异性(不会去干预,会自适应)
SetWindowExtEx(hdc, , , NULL);
//相当于取出原来逻辑窗口的100*100像素放大为现在视口的1/2*1/2(1/4) 所以现在视口所显示的最大尺寸为200*200
SetViewportExtEx(hdc, cxClient / , cyClient / , NULL);
//设置视口原点在中心
SetViewportOrgEx(hdc, cxClient / , cyClient / , NULL); //MM_ISOTROPIC: windows为了保证按比例将整个视口落在视图中,会将多余的尺寸排除在外,若是有背景,则多余为黑色,会以最大比例占据窗口(前提是和原来设置和视口和窗口之比不变的前提下)
//MM_ANISOTROPIC:则不会,而是成比例拉伸
Rectangle(hdc, -, -, , );
Ellipse(hdc, -, -, , ); EndPaint(hwnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage();
return ;
} return DefWindowProc(hwnd, message, wParam, lParam);
}

上面只修改了大小对应,下面则修改了方向:

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
int iMapMode;
static int cxClient, cyClient;
switch (message)
{
case WM_SIZE:
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
break;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
//创建自定义映射 iMapMode = GetMapMode(hdc);
//SetMapMode(hdc, MM_ISOTROPIC); //各向同性(会去干预映射过程,将多余裁剪)
SetMapMode(hdc, MM_ANISOTROPIC); //各向异性(不会去干预,会自适应)
SetWindowExtEx(hdc, , , NULL);
//相当于取出原来逻辑窗口的100*100像素放大为现在视口的1/2*1/2(1/4) 所以现在视口所显示的最大尺寸为200*200 //修改这里两个值得正负可以修改视口的x,y指向
//默认MM_TEXT x向右为正 y向下为正
SetViewportExtEx(hdc, cxClient / , cyClient / , NULL);
//修改后 x向左为正 y向上为正
SetViewportExtEx(hdc, -cxClient / , -cyClient / , NULL);
//.... //设置视口原点在中心
SetViewportOrgEx(hdc, cxClient / , cyClient / , NULL); //MM_ISOTROPIC: windows为了保证按比例将整个视口落在视图中,会将多余的尺寸排除在外,若是有背景,则多余为黑色,会以最大比例占据窗口(前提是和原来设置和视口和窗口之比不变的前提下)
//MM_ANISOTROPIC:则不会,而是成比例拉伸
Rectangle(hdc, -, -, , );
Ellipse(hdc, -, -, , ); //发现采用默认MM_TEXT方式
TextOut(hdc, -, -, L"Love", );
TextOut(hdc, , , L"HAHA", ); MoveToEx(hdc, , -, NULL);
LineTo(hdc, , );
MoveToEx(hdc, -, , NULL);
LineTo(hdc, , ); EndPaint(hwnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage();
return ;
} return DefWindowProc(hwnd, message, wParam, lParam);
}

学习windows编程 day4 之 自定义映射的更多相关文章

  1. 学习windows编程 day4 之 映射模式

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  2. 学习windows编程 day4 之视口和窗口

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  3. 学习windows编程 day4 之 绘制随机矩形和peekMessage

    #include <windows.h> #include <strsafe.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT messa ...

  4. 学习windows编程 day4 之 盯裆猫

    写着写着就困了.... 看这些测量数据就算了,是对各种函数的练习 #include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT ...

  5. 学习windows编程 day4 之 多边矩形填充

    #include <windows.h> #include <math.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, ...

  6. 学习windows编程 day4 之 设置画刷

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  7. 学习windows编程 day4 之 矩形的操作

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  8. 学习windows编程 day3 之 自定义画笔的两种方法

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  9. 有一定基础的 C++ 学习者该怎样学习 Windows 编程?

    人的心理有个奇异的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解非常快就会忘得干干净净,似乎一切都是自然而然,本来就该这种.因此,关于「怎样入门」这类问题,找顶尖高手来回答,未必能比一个刚入门 ...

随机推荐

  1. 第二个spring,第三天

    陈志棚:成绩的统筹 李天麟:界面音乐 徐侃:代码算法 给位组员继续的完成分配任务.

  2. Linux虚拟机下与主机通信

    1.更改虚拟机ip和主机ip同一网段 2.配置虚拟机的网络适配器 3.主机进行ping测试

  3. iOS中单例创建时不严格造成的问题和解决方法

    这次项目中遇到了一个单例创建不严格造成了的问题.简单说来就是在有的地方使用了alloc创建了多个实例,当然如果严格按照接口的方法调用是不会有问题的,但是如果项目碰到有不太熟悉的人使用时在处理时就会出现 ...

  4. 【转】单片机HEX文件完全解读

    转:http://www.eefocus.com/craftor/blog/10-07/193051_8ce59.html Craftor原创,首发于与非网,转载请保留此处. HEX文件,是Intel ...

  5. 推荐一个php7+ mongodb三方类

      373 次阅读  ·  读完需要 8 分钟 5 由于项目需要,把项目升级到了php7.但是升级了之后发现mongo扩展不能用了.php7.0以上只支持mongodb扩展了.而mongodb扩展的驱 ...

  6. 智能制造(MES)四大阶段

    智能制造的发展会经历标准化.自动化.信息化.智能化四个阶段标准化,对于生产流程.业务流程.生产制造多方面的标准化.质量检测标准化.企业管理.供应链等.标准化是组织现代化生产的重要组成部分,对于生产专业 ...

  7. idea for mac 最全快捷键整理

    一.Mac键盘符号和修饰键说明 ⌘ Command ⇧Shift ⌥ Option ⌃ Control ↩︎ Return/Enter ⌫ Delete ⌦ 向前删除键(Fn+Delete) ↑ 上箭 ...

  8. Test Scenarios for image upload functionality (also applicable for other file upload functionality)

    1 check for uploaded image path2 check image upload and change functionality3 check image upload fun ...

  9. Bootstrap洼地

    前面的话 这是一个轻量.灵活的组件,它能延伸至整个浏览器视口来展示网站上的关键内容.本文将详细介绍Bootstrap洼地 概述 洼地(Well)样式的效果和巨幕jumbotron样式类似,不同点是we ...

  10. python----特殊闭包

    1.闭包的定义: 当子函数有调用父级函数变量(非全局变量)并返回子函数名时父级函数不会随着函数运行而结束释放,而是会保存状态等待子函数的调用. 我们常见的闭包类型: def fun1(): x = 1 ...