鱼C论坛

 找回密码
 立即注册
查看: 3544|回复: 7

关于客户区坐标的问题

[复制链接]
发表于 2014-10-16 17:56:24 | 显示全部楼层 |阅读模式
50鱼币
  1. #include <Windows.h>
  2. #include <iostream>
  3. #include <tchar.h>

  4. HINSTANCE g_hInstance;
  5. HANDLE g_hStdOut;
  6. PAINTSTRUCT ps;
  7. HDC hdc;

  8. LRESULT CALLBACK WndProc(HWND hWnd,
  9.     UINT uMsg,
  10.     WPARAM wParam,
  11.     LPARAM lParam)
  12. {
  13.     static int nX = 0,nY = 0;
  14.     RECT rect;
  15.     GetClientRect(hWnd,&rect);

  16.     switch (uMsg)
  17.     {
  18.     case WM_KEYDOWN:
  19.     {
  20.         switch(wParam)
  21.         {
  22.         case VK_LEFT:
  23.             {
  24.                 if(nX >= (rect.left + 10))
  25.                 {
  26.                     nX -= 10;
  27.                 }
  28.                 InvalidateRect(hWnd,NULL,TRUE);
  29.             }
  30.             break;
  31.         case VK_UP:
  32.             {
  33.                 if( nY >= (rect.top + 10))
  34.                 {
  35.                     nY -= 10;
  36.                 }
  37.                 InvalidateRect(hWnd,NULL,TRUE);
  38.             }
  39.             break;
  40.         case VK_RIGHT:
  41.             {
  42.                 if(nX <= (rect.right - 40)) //请帮我找找逻辑上的错误
  43.                 {
  44.                     nX += 10;
  45.                 }
  46.                 InvalidateRect(hWnd,NULL,TRUE);
  47.             }
  48.             break;
  49.         case VK_DOWN:
  50.             {
  51.                 if(nY <= (rect.bottom - 21))  //请帮我找找逻辑上的错误
  52.                 {
  53.                     nY += 10;
  54.                 }
  55.                 InvalidateRect(hWnd,NULL,TRUE);
  56.             }
  57.             break;   
  58.         }

  59.     }
  60.     case WM_PAINT:
  61.     {
  62.         hdc = BeginPaint(hWnd,&ps);

  63.         TCHAR szText[] = TEXT("hello");;
  64.         TextOut(hdc,nX,nY,szText,lstrlen(szText));

  65.         EndPaint(hWnd,&ps);
  66.         break;
  67.     }
  68.     case WM_DESTROY:
  69.         PostQuitMessage(0);
  70.         return 0;
  71.     }
  72.     return DefWindowProc(hWnd, uMsg, wParam, lParam);
  73. }

  74. void RegisterWnd(LPCTSTR lpClassName)
  75. {
  76.     WNDCLASSEX wce;
  77.     wce.style = CS_HREDRAW | CS_VREDRAW;
  78.     wce.lpfnWndProc = WndProc;
  79.     wce.cbSize = sizeof(WNDCLASSEX);
  80.     wce.cbClsExtra = 0;
  81.     wce.cbWndExtra = 0;
  82.     wce.hInstance = g_hInstance;
  83.     wce.hIcon = 0;
  84.     wce.hCursor = 0;
  85.     wce.hIconSm = 0;
  86.     wce.hbrBackground = HBRUSH(COLOR_BTNFACE + 1);
  87.     wce.lpszClassName = lpClassName;
  88.     wce.lpszMenuName = 0;
  89.     if (!RegisterClassEx(&wce))
  90.     {
  91.         MessageBox(NULL, TEXT("注册失败"), TEXT("提示"), MB_OK);
  92.     }

  93. }

  94. HWND CreateWnd(LPCTSTR lpClassName)
  95. {
  96.     HWND hWnd = CreateWindowEx(0, lpClassName, L"HELLO",
  97.         WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
  98.         CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, g_hInstance, NULL);
  99.     return hWnd;
  100. }

  101. void DisplayWnd(HWND hWnd)
  102. {
  103.     ShowWindow(hWnd, SW_SHOW);
  104.     UpdateWindow(hWnd);
  105. }

  106. void Message()
  107. {
  108.     MSG msg;
  109.     while (GetMessage(&msg, NULL, 0, 0))
  110.     {
  111.         TranslateMessage(&msg);
  112.         DispatchMessage(&msg);
  113.     }
  114. }

  115. int WINAPI WinMain(HINSTANCE hInstance,
  116.     HINSTANCE hPrevInstance,
  117.     LPSTR     lpCmdLine,
  118.     int       nCmdShow)
  119. {
  120.     g_hInstance = hInstance;
  121.     RegisterWnd(L"hello");
  122.     HWND hWnd = CreateWnd(L"hello");
  123.     DisplayWnd(hWnd);
  124.     Message();
  125.     return 0;
  126. }
复制代码

最佳答案

查看完整内容

那就获得当前文本"hello"显示的长度和宽度,然后对坐标进行相应的增减
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-10-16 17:56:25 | 显示全部楼层
拈花小仙 发表于 2014-10-17 09:53
月月~我注释的那两行都是人工调的,说明我的算法逻辑有错误,客户区的各种上下左右稍调把我弄 ...

那就获得当前文本"hello"显示的长度和宽度,然后对坐标进行相应的增减
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-10-16 20:25:50 | 显示全部楼层
运行了一下,你的目的是什么?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-17 09:53:31 | 显示全部楼层
风之残月 发表于 2014-10-16 20:25
运行了一下,你的目的是什么?

月月~我注释的那两行都是人工调的,说明我的算法逻辑有错误,客户区的各种上下左右稍调把我弄晕了~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-17 11:25:26 | 显示全部楼层
风之残月 发表于 2014-10-17 10:39
那就获得当前文本"hello"显示的长度和宽度,然后对坐标进行相应的增减

不会用哦
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-17 11:34:26 | 显示全部楼层
风之残月 发表于 2014-10-17 10:39
那就获得当前文本"hello"显示的长度和宽度,然后对坐标进行相应的增减

月月,这个算法有问题嘛?只是无法获取hello右下角坐标的问题嘛?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-10-17 20:11:48 | 显示全部楼层
算法应该没有错,只是要计算"hello"这个字符串的宽度和高度,分别用于设置nx,ny,你可以去网上找找有没有相应的API
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-8-26 08:15:58 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-7 03:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表