谦虚求学 发表于 2016-10-28 19:23:25

小甲鱼老师讲的第17节课后作业里面的那个极坐标在客户区找X,Y坐标不会求解答

本帖最后由 谦虚求学 于 2016-10-28 19:32 编辑

/* -------------------------------------------------------------------
MyWindows.c -- 基本窗口模型
《Windows 程序设计(SDK)》视频教程
--------------------------------------------------------------------*/

#include <windows.h>
#include <math.h>
#include <strsafe.h>

#define PI 3.1415926                     //圆周率
#define F(x)
#define R(theta)(sin(4 * theta))      //待作图函数【修改此处,可以得到不同的函数图】
#define P_MIN (0)                            //区间左端点
#define P_MAX (2 * PI)                  //区间右端点【修改此处及上处,可以得到不同的作图区间】
#define LIMIT 2                              //最大坐标轴标度 【修改此处,可以对图像进行缩放】
#define S_NUM 360                         //采样数

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
      static TCHAR szAppName[] = TEXT("MyWindows");
      HWND hwnd;
      MSG msg;
      WNDCLASS wndclass;

      wndclass.style = CS_HREDRAW | CS_VREDRAW;
      wndclass.lpfnWndProc = WndProc;
      wndclass.cbClsExtra = 0;
      wndclass.cbWndExtra = 0;
      wndclass.hInstance = hInstance;
      wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
      wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
      wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
      wndclass.lpszMenuName = NULL;
      wndclass.lpszClassName = szAppName;

      if (!RegisterClass(&wndclass))
      {
                MessageBox(NULL, TEXT("这个程序需要在 Windows NT 才能执行!"), szAppName, MB_ICONERROR);
                return 0;
      }

      hwnd = CreateWindow(szAppName,
                TEXT("鱼C工作室"),
                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;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
      HDC hdc;
      PAINTSTRUCT ps;
      static int cxClient, cyClient;
      POINT apt;
      double theta;
      int x, y, cxCenter, cyCenter;

      switch (message)
      {
      case WM_SIZE:
                cxClient = LOWORD(lParam);
                cyClient = HIWORD(lParam);
                return 0;

      case WM_PAINT:
                hdc = BeginPaint(hwnd, &ps);

                cxCenter = cxClient / 2;
                cyCenter = cyClient / 2;

                x = (int)(R(P_MIN) * cos(P_MIN) * cxCenter / LIMIT + cxCenter);
                y = (int)(-1 * R(P_MIN) * sin(P_MIN) * cyCenter / LIMIT + cyCenter);   //计算初始屏幕坐标
                MoveToEx(hdc, x, y, NULL);

                for (int i = 0; i < S_NUM; i++)
                {
                        theta = (double)((P_MAX - P_MIN) * i / S_NUM + P_MIN);//计算角度

                        apt.x = (int)(R(theta) * cos(theta) * cxCenter / LIMIT + cxCenter);
                        apt.y = (int)(-1 * R(theta) * sin(theta) * cyCenter / LIMIT + cyCenter);//计算屏幕坐标
                }

                PolylineTo(hdc, apt, S_NUM);

                EndPaint(hwnd, &ps);
                return 0;

      case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
      }

      return DefWindowProc(hwnd, message, wParam, lParam);
}

    我数学不好 希望大神多多指教{:5_99:}



alltolove 发表于 2016-10-28 19:36:10

x=r*cos(角度)
y=r*sin(角度)

谦虚求学 发表于 2016-10-29 12:57:34

alltolove 发表于 2016-10-28 19:36
x=r*cos(角度)
y=r*sin(角度)

你好啊 ,我想问的是在客户区X,Y坐标怎么定的点,或者说在客户区X,Y是如何初始化屏幕的 {:5_94:}

谦虚求学 发表于 2016-10-29 12:59:01

alltolove 发表于 2016-10-28 19:36
x=r*cos(角度)
y=r*sin(角度)

谢谢   请给我文字 讲解下我数学 不好 {:5_100:}

alltolove 发表于 2016-10-29 16:47:12

客户区就是坐上角是0,0点,横坐标x纵坐标是y啊。。。

谦虚求学 发表于 2016-10-29 19:08:14

真的不会了

本帖最后由 谦虚求学 于 2016-10-29 19:10 编辑

alltolove 发表于 2016-10-29 16:47
客户区就是坐上角是0,0点,横坐标x纵坐标是y啊。。。

感谢你的 回答 ,谢谢   ,就这个代码题而言,我在代码里用笔把我要问的哪个极坐标X,Y转化圈了起来 ,他们在客户区里花的折线定点问题,我知道客户区的基点在左上角 ,但是要画着个花,代码里说的计算初始屏幕坐标(X 和 Y )怎么在哪里定, 我真的不会了 ,

alltolove 发表于 2016-10-29 21:57:51

你是说从新定位画面中间为x,y的0,0点吧? 用SetViewportOrgEx这个函数就可以。

谦虚求学 发表于 2016-10-30 10:33:56

alltolove 发表于 2016-10-29 21:57
你是说从新定位画面中间为x,y的0,0点吧? 用SetViewportOrgEx这个函数就可以。

谢谢你,我对客户区里比如 画一个东西 我对里面X,Y的定位问题很不懂 ,所以才问这样的问题,心里好无奈 啊,也没有个讲解客户区里画个 物件 定位的书或文章哎
页: [1]
查看完整版本: 小甲鱼老师讲的第17节课后作业里面的那个极坐标在客户区找X,Y坐标不会求解答