小编Arc*_*des的帖子

传递给SetWindowText的窗口标题的最大长度是多少?

函数SetWindowText函数的文档没有对可以用作窗口标题字符串的长度设置限制。

WM_SETTEXT(通过调用SetWindowText发送的消息)的文档中,注意到该消息的处理返回值可能是:

如果没有足够的空间来设置编辑控件中的文本,则为FALSE(对于编辑控件),LB_ERRSPACE(对于列表框)或CB_ERRSPACE(对于组合框)。

但是,它并没有说明设置窗口标题的情况。是否设置了严格的限制,还是由程序员使用常识提供自己的标题长度限制?


之所以这样发布,是因为我正在开发一种图形引擎,允许用户为主窗口提供自己的标题。我的想法是定义一个常量,例如

const static int MAX_APP_TITLE_LENGTH = /* ??? */;
Run Code Online (Sandbox Code Playgroud)

在我的应用程序类中,并对照此检查用户提供的标题字符串的长度。

如果标题字符串太长,我可以抛出警告消息并截断它,而不是将其直接传递到SetWindowText中,从而产生意想不到的后果。


编辑:在评论中进行了一些讨论之后,即使将长度为100,000的字符串用作窗口标题,Windows似乎也不会抱怨,因此,这个问题不值得担心(当然,除了输入的基本清理之外)!

winapi

6
推荐指数
1
解决办法
2214
查看次数

filebuf :: openprot的用途是什么,是否有替换?

我正在修复使用旧式iostream库的一些相当旧的C++代码,我遇到了以下非编译代码行:

::ofstream ofile;
ofile.open("filename", ios::trunc, filebuf::openprot);
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

error C2039: 'openprot' : is not a member of 'std::basic_filebuf<_Elem,_Traits>'
Run Code Online (Sandbox Code Playgroud)

所以很明显它不再存在了.问题是,我找不到任何关于什么openprot作为参数的信息,因此我不能用新的东西替换它,我害怕完全删除参数.

任何有历史C++知识的人都知道这件事做了什么?

c++

5
推荐指数
1
解决办法
1879
查看次数

主窗口关闭后,如何防止Win32应用程序在后台运行?

我是Win32 API的初学者,但我对C++有中等经验.出于学习目的,我根据参考资料,教程和示例创建了一个非常简单的Win32应用程序.

问题是,在主窗口关闭后,其进程仍然在后台运行.我怎么能阻止这个?在我的WndProc函数中,我确实有一个带有DestroyWindow的WM_DESTROY案例,但它似乎没有做到这一点.代码如下:

#include <cstdio>
#include <cstdlib>

#ifdef UNICODE
#include <tchar.h>
#endif

#include <Windows.h>

HINSTANCE hinst;
HWND hwnd;

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

#ifdef UNICODE
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
#else
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
#endif
{
    MSG msg;
    WNDCLASSEX mainclass;
    BOOL bRet;
    UNREFERENCED_PARAMETER(lpCmdLine);

    mainclass.cbSize =          sizeof(WNDCLASSEX);
    mainclass.style =           CS_VREDRAW | CS_HREDRAW;
    mainclass.lpfnWndProc =     (WNDPROC) WndProc;
    mainclass.cbClsExtra =      NULL;
    mainclass.cbWndExtra =      NULL;
    mainclass.hInstance = …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi visual-c++

4
推荐指数
1
解决办法
2274
查看次数

Python 3.2.3:Socket需要更长的时间来超时吗?

我在Windows 7上使用Python 3.2.3,并且我已经连接到具有阻塞套接字的服务器的一段代码,具有用户指定的超时值.代码很简单:

testconn = socket.create_connection((host, port), timeout)
Run Code Online (Sandbox Code Playgroud)

代码工作正常,除了奇怪的事实,超时似乎需要比无效请求更长的时间.我试图故意连接到www.google.com:59855(随机端口应该意味着它应该尝试连接,直到达到超时),超时为5秒,但似乎至少需要15秒才能超时.

是否有任何可能的原因和/或任何修复?(如果它不可修复,这不是一个大问题,但不过可以理解解决方案.)在此先感谢.

python sockets windows networking

1
推荐指数
1
解决办法
708
查看次数

MultiByteToWideChar使用垃圾终止输出缓冲区,但报告没有错误.为什么?

在前几天开发程序时,我不得不将ASCII字符串转换为Unicode字符串.顺便说一下,我正在使用Visual Studio 2012在Windows上工作.我注意到Win32函数MultiByteToWideChar有一些奇怪的行为,我无法理清.我写了一些测试代码,如下:

int main()
{
    /* Create const test string */
    char str[] = "test string";

    /* Create empty wchar_t buffer to hold Unicode form of above string, and initialize (zero) it */
    wchar_t *buffer = (wchar_t*) LocalAlloc(LMEM_ZEROINIT, sizeof(wchar_t) * strlen(str));

    /* Convert str to Unicode and store in buffer */
    int result = MultiByteToWideChar(CP_UTF8, NULL, str, strlen(str), buffer, strlen(str));
    if (result == 0)
        printf("GetLastError result: %d\n", GetLastError());

    /* Print MultiByteToWideChar result, str's length, and buffer's length …
Run Code Online (Sandbox Code Playgroud)

c c++ unicode winapi visual-studio-2012

1
推荐指数
1
解决办法
3381
查看次数