无法在C++Win32中将URL或ID设置为SysLink
Can not Set URL or ID to SysLink in C++ Win32
这是我的代码,但它没有编译,并给出两个错误:
error C2440: '=' : cannot convert from 'WCHAR' to 'WCHAR [2084]'
IntelliSense: expression must be a modifiable lvalue
我已经阅读了下面的链接,但它对我没有帮助:
错误C2106:'=';:左操作数必须是l值
[代码]:
#define ID_SysLink 500
HWND hWnd;
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch (Msg)
{
case WM_CREATE:
{
HWND syslink_handle=0;
syslink_handle=CreateWindowEx(0, WC_LINK, L"test syslink", WS_VISIBLE | WS_CHILD , 10, 10, 100, 30, hWnd, HMENU(ID_SysLink), 0, 0);
LITEM *pitem = 0;
pitem->iLink = 0;
pitem->mask = LIF_ITEMINDEX | LIF_ITEMID | LIF_URL | LIF_STATE;
pitem->state = LIS_ENABLED | LIS_FOCUSED | LIS_HOTTRACK;
pitem->stateMask = LIS_ENABLED | LIS_FOCUSED | LIS_HOTTRACK;
WCHAR url_wchar = WCHAR(L"http://www.google.com");
pitem->szUrl = url_wchar;
SendMessage(syslink_handle, LM_SETITEM, 0, LPARAM(&pitem));
}
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, Msg, wParam, lParam);
break;
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPreviewInstance,LPSTR lpcmdline,int ncmdshow)
{
WNDCLASSEX wndexcls;
wndexcls.lpszClassName = wndclssname;
wndexcls.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndexcls.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wndexcls.hCursor = LoadCursor(NULL, IDC_ARROW);
wndexcls.hbrBackground = (HBRUSH)(COLOR_3DDKSHADOW + 1);
wndexcls.lpszMenuName = NULL;
wndexcls.style = NULL;
wndexcls.hInstance = hInstance;
wndexcls.cbSize = sizeof(WNDCLASSEX);
wndexcls.cbClsExtra = 0;
wndexcls.cbWndExtra = 0;
wndexcls.lpfnWndProc = WndProc;
RegisterClassEx(&wndexcls);
hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, L"winclass", L"TestApp", WS_OVERLAPPEDWINDOW, 100, 100, 640, 380, 0, 0,hInstance, 0);
ShowWindow(hWnd, ncmdshow);
UpdateWindow(hWnd);
MSG wnd_msg;
while (GetMessage(&wnd_msg,NULL,0,0)>0)
{
TranslateMessage(&wnd_msg);
DispatchMessage(&wnd_msg);
}
return (int)wnd_msg.wParam;
}
谢谢你的帮助。
WCHAR url_wchar = WCHAR(L"http://www.google.com"); pitem->szUrl = url_wchar;
你可能想让url_wchar
成为一个指针:
WCHAR* url_wchar = L"http://www.google.com";
不幸的是,szUrl
不是指针,而是一个字符数组。因此,要分配它,您需要使用字符串复制函数将字符串复制到其中(而不仅仅是将其分配为指针)。例如,
wcscpy_s(pitem->szUrl, L_MAX_URL_LENGTH, L"http://www.google.com");
如果你真的编译了这个,你会发现它或多或少会立即崩溃,因为这一点:
LITEM *pitem = 0;
pitem->iLink = 0;
你正在写入一个空指针。您需要为LITEM
结构分配空间,或者(最好)在堆栈上声明它:
LITEM item{};
item.mask = LIF_ITEMINDEX | LIF_ITEMID | LIF_URL | LIF_STATE;
item.state = LIS_ENABLED | LIS_FOCUSED | LIS_HOTTRACK;
item.stateMask = LIS_ENABLED | LIS_FOCUSED | LIS_HOTTRACK;
wcscpy_s(item.szUrl, L_MAX_URL_LENGTH, L"http://www.google.com");
SendMessage(syslink_handle, LM_SETITEM, 0, (LPARAM)&item);
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- 如何在自删除后将对象设置为nullptr
- 将指针设置为"nullptr"并不能防止双重删除?
- 如何在Ubuntu中使用cmake设置qt4
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 如何在 tdesktop 中设置电报的应用 ID?
- 使用 C 在 Linux 中设置用户的补充组 ID
- 是Set-user-id位设置
- 使用QxOrm手动设置ID(PK)
- 在C++中设置产品ID版本、公司和其他应用程序信息
- 将组合框设置为另一个组合框的ID
- 无法在C++Win32中将URL或ID设置为SysLink
- 设置 AD 标志时获取"The security ID structure is invalid"
- 为所有游标id在系统范围内设置自定义游标
- 如何在c++中设置activemq mapmessage中的消息组id
- IBM MQ - WMQ C++ 获取请求的消息 ID 并将其设置为回复的相关 ID