该函数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似乎也不会抱怨,因此,这个问题不值得担心(当然,除了输入的基本清理之外)!
我正在修复使用旧式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++知识的人都知道这件事做了什么?
我是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) 我在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秒才能超时.
是否有任何可能的原因和/或任何修复?(如果它不可修复,这不是一个大问题,但不过可以理解解决方案.)在此先感谢.
在前几天开发程序时,我不得不将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)