如何将int转换为LPARAM c / c ++?

时间:2013-09-08 11:26:58

标签: c++ c winapi type-conversion

这是我尝试过的。它构建并运行良好但打印空白。

功能:

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

3 个答案:

答案 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数组的地址,而不是数字。您希望将表示转换为此类数组。可能的方法是:

答案 2 :(得分:0)

我就是这样做的:

LPARAM myLParam;
int myInt;
myLParam = (LPARAM) myInt; // This where the int is converted to the LPARAM