这是我尝试过的。它构建并运行良好但打印空白。
功能:
void wmessage(LPARAM msg, HWND hwnd)
{
SendMessage(hwnd,
WM_SETTEXT,
NULL,
msg);
}
用法:
//wmessage((LPARAM)"Not logged in22", noEdit); //prints
//wmessage((LPARAM)(t - clock()), noEdit); //prints blank
//wmessage((LPARAM)(555), noEdit); //prints blank
int num= (t - clock()); // t is a clock_t variable
wmessage((LPARAM)num, noEdit); //prints blank
所以我搜索了但似乎无法找到任何提及如何做到这一点。
目的是这个文本框在倒计时时以秒为单位打印时间,因此它需要是一个int
答案 0 :(得分:2)
WM_SETTEXT
期望lParam
指向0
终止的字符数组。在那里放置一个整数是没有意义的。
来自上面链接的WM_SETTEXT
文档:
<强> lParam的强>
指向以null结尾的字符串的指针,该字符串是窗口文本。
要将文本设置为“555”,您可能会喜欢这样做
char * txt = "555";
wmessage((LPARAM) txt, <some window handle>);
如果要将数字变量设置为文本,请将其转换为您喜欢的文本表示形式。有几种方法可以做到这一点。使用sprintf()
是最灵活的方法:
#include <time.h> /* for clock_t, clock() */
#include <stdio.h> /* for sprintf() */
clock_t t = <some value>;
clock_t num = (t - clock());
char buffer [16] = "";
sprintf(buffer, "%ld", num);
wmessage((LPARAM) buffer, <some window handle>);
应该注意到这个答案的例子不能在unicode环境中编译。
答案 1 :(得分:1)
LPARAM应该是以null结尾的char数组的地址,而不是数字。您希望将表示转换为此类数组。可能的方法是:
std::sprintf
将int转换为char数组,然后传递char数组。std::stringstream
或std::to_string
将其转换为std::string
,然后使用c_str()
获取它。答案 2 :(得分:0)
我就是这样做的:
LPARAM myLParam;
int myInt;
myLParam = (LPARAM) myInt; // This where the int is converted to the LPARAM