鱼C论坛

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

关于客户区坐标的问题

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

HINSTANCE g_hInstance;
HANDLE g_hStdOut;
PAINTSTRUCT ps;
HDC hdc;

LRESULT CALLBACK WndProc(HWND hWnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam)
{
    static int nX = 0,nY = 0;
    RECT rect;
    GetClientRect(hWnd,&rect);

    switch (uMsg)
    {
    case WM_KEYDOWN:
    {
        switch(wParam)
        {
        case VK_LEFT:
            {
                if(nX >= (rect.left + 10))
                {
                    nX -= 10;
                }
                InvalidateRect(hWnd,NULL,TRUE);
            }
            break;
        case VK_UP:
            {
                if( nY >= (rect.top + 10))
                {
                    nY -= 10;
                }
                InvalidateRect(hWnd,NULL,TRUE);
            }
            break;
        case VK_RIGHT:
            {
                if(nX <= (rect.right - 40)) //请帮我找找逻辑上的错误
                {
                    nX += 10;
                }
                InvalidateRect(hWnd,NULL,TRUE);
            }
            break;
        case VK_DOWN:
            {
                if(nY <= (rect.bottom - 21))  //请帮我找找逻辑上的错误
                {
                    nY += 10;
                }
                InvalidateRect(hWnd,NULL,TRUE);
            }
            break;   
        }

    }
    case WM_PAINT:
    {
        hdc = BeginPaint(hWnd,&ps);

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

        EndPaint(hWnd,&ps);
        break;
    }
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

void RegisterWnd(LPCTSTR lpClassName)
{
    WNDCLASSEX wce;
    wce.style = CS_HREDRAW | CS_VREDRAW;
    wce.lpfnWndProc = WndProc;
    wce.cbSize = sizeof(WNDCLASSEX);
    wce.cbClsExtra = 0;
    wce.cbWndExtra = 0;
    wce.hInstance = g_hInstance;
    wce.hIcon = 0;
    wce.hCursor = 0;
    wce.hIconSm = 0;
    wce.hbrBackground = HBRUSH(COLOR_BTNFACE + 1);
    wce.lpszClassName = lpClassName;
    wce.lpszMenuName = 0;
    if (!RegisterClassEx(&wce))
    {
        MessageBox(NULL, TEXT("注册失败"), TEXT("提示"), MB_OK);
    }

}

HWND CreateWnd(LPCTSTR lpClassName)
{
    HWND hWnd = CreateWindowEx(0, lpClassName, L"HELLO",
        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
        CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, g_hInstance, NULL);
    return hWnd;
}

void DisplayWnd(HWND hWnd)
{
    ShowWindow(hWnd, SW_SHOW);
    UpdateWindow(hWnd);
}

void Message()
{
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

int WINAPI WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR     lpCmdLine,
    int       nCmdShow)
{
    g_hInstance = hInstance;
    RegisterWnd(L"hello");
    HWND hWnd = CreateWnd(L"hello");
    DisplayWnd(hWnd);
    Message();
    return 0;
}

最佳答案

查看完整内容

那就获得当前文本"hello"显示的长度和宽度,然后对坐标进行相应的增减
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

那就获得当前文本"hello"显示的长度和宽度,然后对坐标进行相应的增减
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-16 20:25:50 | 显示全部楼层
运行了一下,你的目的是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

月月~我注释的那两行都是人工调的,说明我的算法逻辑有错误,客户区的各种上下左右稍调把我弄晕了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

不会用哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

月月,这个算法有问题嘛?只是无法获取hello右下角坐标的问题嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2015-8-26 08:15:58 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 19:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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