windows-求教关于窗口放大,缩小,贝塞尔线相应的放大缩小问题

问题描述

求教关于窗口放大,缩小,贝塞尔线相应的放大缩小问题

#include
#include
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM , LPARAM);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCMDLine, int iCmdShow)

{
static TCHAR szAppName[] = TEXT("BEZER");
HWND hwnd;
WNDCLASS wndclass;
MSG msg;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpszClassName = szAppName;
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.lpszMenuName = NULL;
wndclass.hIcon = LoadIcon (NULL,IDI_APPLICATION);
wndclass.hCursor = LoadCursor (NULL,IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);

if(!RegisterClass(&wndclass))
{
    MessageBox(NULL, TEXT("BEZER Windows Class Not Register!"), szAppName, MB_ICONERROR);
    return 0;
}
hwnd = CreateWindow(szAppName, TEXT ("BEZIER SPLINES"),
                    WS_OVERLAPPEDWINDOW,
                    CW_USEDEFAULT,CW_USEDEFAULT,
                    CW_USEDEFAULT,CW_USEDEFAULT,
                    NULL,NULL,hInstance,NULL);
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
return msg.wParam;

}

void DrawBezier(HDC hdc, POINT apt[])
{
PolyBezier (hdc, apt, 4);
MoveToEx (hdc, apt[0].x, apt[0].y, NULL);
LineTo (hdc, apt[1].x, apt[1].y);
MoveToEx (hdc, apt[2].x, apt[2].y, NULL);
LineTo (hdc, apt[3].x, apt[3].y);
}

LRESULT CALLBACK WndProc (HWND hwnd ,UINT message, WPARAM wParam, LPARAM lParam)
{
static POINT apt[4],bpt[4];
static int NUM=0;
static int cxClient, cyClient;
static int bcxClient, bcyClient;
HDC hdc;
PAINTSTRUCT ps;
int i;
TCHAR tBuffer [255];
switch (message)
{
case WM_SIZE :
cxClient = LOWORD (lParam);
cyClient = HIWORD (lParam);

               apt[0].x = cxClient / 4;
               apt[0].y = cyClient / 2;

               apt[1].x = cxClient / 2;
               apt[1].y = cyClient / 4;

               apt[2].x = cxClient / 2;
               apt[2].y = 3 * cyClient / 4;

               apt[3].x = 3 * cxClient / 4;
               apt[3].y = cyClient / 2;
               NUM++;
               if(NUM >1)
               {
                 if(cxClient != bcxClient && cyClient != bcxClient)
                 {                                                      //求教此处当改变窗口大小的时候 btp 结构数组的值还是apt的值
                   for(i = 0; i != 4; i++)
                   {                                                               //此处我想实现窗口放大,缩小,坐标相应的按比例放大缩小
                     apt[i].x = (bpt[i].x * (float) (cxClient / bcxClient));
                     apt[i].y = (bpt[i].y * (float) (cyClient / bcyClient));
                   }                                                    //到此处,为何bpt的值和apt一样了呢?
                 }
                 else
                 {
                   for(i = 0; i != 4; i++)
                   {
                     apt[i].x = bpt[i].x;
                     apt[i].y = bpt[i].y;
                   }
                 }
               }

               return 0;
case WM_LBUTTONDOWN :
case WM_RBUTTONDOWN :
case WM_MOUSEMOVE:
               if (wParam & MK_LBUTTON || wParam & MK_RBUTTON)
               {
                   hdc=GetDC (hwnd);
                   SelectObject (hdc, GetStockObject (WHITE_PEN));
                   DrawBezier (hdc, apt);
                   if(wParam & MK_LBUTTON)
                   {
                       apt[1].x = LOWORD (lParam);
                       apt[1].y = HIWORD (lParam);
                   }
                   if(wParam & MK_RBUTTON)
                   {
                       apt[2].x = LOWORD (lParam);
                       apt[2].y = HIWORD (lParam);
                   }
                   SelectObject (hdc, GetStockObject(BLACK_PEN));
                   DrawBezier (hdc, apt);
                   ReleaseDC (hwnd, hdc);
                   for(i = 0; i != 4; i++)
                   {
                     bpt[i].x = apt[i].x;
                     bpt[i].y = apt[i].y;
                   }
               }
               return 0;
case WM_PAINT:
              InvalidateRect (hwnd, NULL, true);
              hdc = BeginPaint (hwnd, &ps);
              DrawBezier (hdc, apt);
              EndPaint (hwnd, &ps);
              bcxClient = cxClient;
              bcyClient = cyClient;
              return 0;
case WM_DESTROY:
              PostQuitMessage (WM_QUIT);
              return 0;
default:
    return DefWindowProc (hwnd, message, wParam, lParam);
}

}

时间: 2024-10-29 13:44:59

windows-求教关于窗口放大,缩小,贝塞尔线相应的放大缩小问题的相关文章

c++-如何在windows系统下使用C++模拟触控板上放大缩小的功能

问题描述 如何在windows系统下使用C++模拟触控板上放大缩小的功能 比如在某个网页界面上,双指聚拢,则页面缩小:双指分离则页面放大. 这个有什么对应的windows消息吗? 如果我已经知道了某个窗口的HWND,能否通过简单的发送消息的形式,达到同样的效果? 或者是能模拟出触控板的行为也可. 解决方案 你可以用spy++看下.一些触摸板式是转换成滚轮消息的. 解决方案二: 这个你查一下windows的消息就知道了,你在触摸屏上执行一个动作,系统是会发送一个消息给你的应用程序的,你只要捕捉到这

windows编程 在一个窗口上加载一个位图图片

问题描述 windows编程 在一个窗口上加载一个位图图片 希望前辈们能给个demo程序.或者最基本的窗口上加载一个位图图片就好,加载位图时用的LoadImage 初学windows编程,不太懂上下文设备,希望大神能给个例程,让我学习. 解决方案 c++windows编程加载图片 解决方案二: #include #include "resource.h" LRESULT CALLBACK WndProc1(HWND hwnd,UINT message,WPARAM wParam,LPA

html5-文字根据页面放大缩小,怎么逐渐的放大缩小,关键是“逐渐”二字

问题描述 文字根据页面放大缩小,怎么逐渐的放大缩小,关键是"逐渐"二字 做网站,我是用百分比做的,出现一个问题,如果浏览器页面大小改变, 文字怎么跟着也逐渐放大和缩小,必须要 文字逐渐的 放大和缩小?关键是"逐渐"二字. 解决方案 jQuery animate()方法,创建自定义动画 <!DOCTYPE html> $(document).ready(function(){ $(""button"").click(

VC++如何将Windows Script Host窗口置顶

问题描述 VC++如何将Windows Script Host窗口置顶 vc++里执行cmd命令:slmgr /ato,会弹出激活系统成功与否的窗口,我想让弹出的这个窗口置顶,用GetForegroundWindow()获取最上端窗口,然后用setwindowpos置顶,但还是没有达到置顶的效果.哪位大侠知道如何弄? 解决方案 ::SetWindowPos(m_hWndTopHWND_TOPMOST0000SWP_NOMOVE|SWP_NOSIZE); 解决方案二: 同一个主程序里的两个子窗口都

Exchange2007在不同网络环境下会出现集成windows身份验证窗口

问题描述 各位专家好:我的exchange2007server使用基于表单的身份验证,在局域网内部访问正常,在外网访问部分正常,但是在某些地区访问时会出现windows身份验证窗口,输入exchange的用户名和密码也无法通过验证,但是根据分析这些地区的网络环境就是正常的路由器上网方式,不知道是什么原因引起的,有什么解决办法. 解决方案 解决方案二:OutlookorOWA?解决方案三:Outlook还要formbasedauthentication?你太牛了:)这种情况往往是你得验证报文由于某

窗口过程-windows程序设计 为什么窗口一开始空白,需要最小化或者改变大小才显示

问题描述 windows程序设计 为什么窗口一开始空白,需要最小化或者改变大小才显示 /*-----------------------------------------SINEWAVE.C -- Sine Wave Using Polyline(c) Charles Petzold 1998-----------------------------------------*/ #include #include #define NUM 1000#define TWOPI (2 * 3.141

java-JAVA 实现Windows下切换窗口到指定的应用程序

问题描述 JAVA 实现Windows下切换窗口到指定的应用程序 JAVA 实现Windows下切换窗口到指定的应用程序,具体实现及code

怎么让Windows 7程序窗口更听话

  鼠标悬停,窗口随即激活 在日常的电脑应用中,我们经常会碰到这样一些情况:在系统桌面上打开多个程序窗口,需要在这些窗口之间反复切换,要激活某个程序窗口的话,通常还得在某个窗口上点击一下才能激活,要是能够将鼠标放到窗口上就激活的话那不是更好?在Windows XP系统中要实现还很麻烦,需要借助于Tweak UI之类的辅助工具来实现,而在Windows 7中只需简单设置即可. 点击"开始"按钮后选择"控制面板"打开控制面板,点击"轻松访问"后在&q

Windows 7系统窗口智能排列

  在Windows 7中,微软为桌面窗口设置新加了一个功能:智能排列.其实翻译成"智能排列"并不是很准确,因为在Windows 7的桌面窗口上,一些应用程序在屏幕顶端,或左右两侧时,应用程序会自动最大化,或占据左右两边的屏幕.如果你不习惯这样的默认行为,完全可以将其屏蔽. 运行注册表,定位到HKEY_CURRENT_USER"Control Panel"Desktop,在右侧窗口中找到并双击"WindowArrangementActive"然后