Mi_yan 2025-04-07 14:07 采纳率: 14.3%
浏览 14

SetWindowPos函数的坐标位置设置问题

SetWindowPos函数的坐标位置设置问题,打开一个记事本文件后,需要对该文件进行坐标位置、高度和宽度的设置,在使用函数SetWindowPos设置窗口坐标位置后,窗口并没有改变位置,但是窗口的高度和宽度是可以设置的,如下代码:

int LeftPos,TopPos

LeftPos = 300;
TopPos = 200;
High = 100;
Width = 200;

ProgramExecute("D:\Test.txt");
Handle=FindWindow("Notepad",NULL);

SetWindowPos(Handle,HWND_TOPMOST,LeftPos,TopPos,High,Width,SWP_NOREDRAW);

不知道为啥窗口的坐标位置无法设置。
如下代码是对坐标位置设置的一个测试,通过打开一个空白的记事本窗口,然后再关闭这个空白记事本窗口,这样是可以达到对打开的“Test.txt“窗口坐标位置的设置,具体如下的测试代码:

int LeftPos,TopPos

LeftPos = 300;
TopPos = 200;
High = 100;
Width = 200;

ProgramExecute("D:\Test.txt");
Handle=FindWindow("Notepad",NULL);

ProgramExecute("Notepad.exe");
Handle2=FindWindow("Notepad",NULL);
SendMessage(Handle2,SW_CLOSE,0,0);

SetWindowPos(Handle,HWND_TOPMOST,LeftPos,TopPos,High,Width,SWP_NOREDRAW);

不知道,是不是打开窗体的父系窗口和子系窗口的问题?想不出好的解决办法。

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-04-07 14:07
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    SetWindowPos函数的坐标位置设置问题

    你遇到了SetWindowPos函数设置窗口坐标位置的问题,窗口并没有改变位置,但是窗口的高度和宽度却被设置了。

    可能的原因是:

    1. 窗口的坐标位置已经被锁定,无法被SetWindowPos函数修改。
    2. 窗口的坐标位置已经被其他窗口或控件占用,无法被SetWindowPos函数修改。

    解决方法:

    1. 使用GetWindowRect函数获取窗口的当前坐标位置,然后使用SetWindowPos函数将窗口移动到指定的坐标位置。
    2. 使用SetWindowPos函数将窗口的坐标位置设置为0,0,然后使用SetWindowPos函数将窗口移动到指定的坐标位置。

    示例代码:

    HWND hWnd = FindWindow(NULL, "记事本"); // 获取记事本窗口的句柄
    RECT rect;
    GetWindowRect(hWnd, &rect); // 获取窗口的当前坐标位置
    SetWindowPos(hWnd, 0, rect.left + 100, rect.top + 100, 0, 0, 0); // 将窗口移动到指定的坐标位置
    

    注意:在使用SetWindowPos函数时,需要确保窗口的坐标位置是可用的,并且不被其他窗口或控件占用。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月7日