....
ntimes=5;
for(i=0;i<ntimes;i++)
{
int index=SendDlgItemMessage(hwnd,ID_DLG_LIST,LB_ADDSTRING,0,(LPARAM)buf);
//buf是要发送的内容 是个字符指针
SendDlgItemMessage(hwnd,ID_DLG_LIST,LB_SETITEMDATA,(WPARAM)index,(LPARAM)ntimes);
}
上面的是从forgets的教程里复制的代码
不明白的地方是index究竟是干什么用的 教程上说是一个类似指针的东西
是为LB_SETITEMDATA提供用处的 可能是这两个消息我不太熟悉
能给我讲讲这两个消息的具体过程和原理是什么 那个教程上说的也比较含糊 呵呵
还有我看SendDlgItemMessage的返回值是LONG类型的 为什么index却用INT类型的
最后就是ntimes的用处了 这个代码是给一个LIST控件添加上5个一样内容的
不明白最后的(LPARAM)ntimes的含义
最后还有一个问题 WinMain主函数前面总有一个 WINAPI的含义
先谢谢大家了
int index=SendDlgItemMessage(hwnd,ID_DLG_LIST,LB_ADDSTRING,0,(LPARAM)buf);
这句话是给句柄为hwnd的对话框发送消息,那么具体发送给这个对话框的哪个控件呢?是发送给ID为ID_DLG_LIST的控件,发送一个LB_ADDSTRING消息,这个消息是给该控件的添加一行记录,0和buf分别为这个消息的WPARAM和LPARAM参数,LB_ADDSTRINGP这个消息的WPARAM通常指定为0,而LPARAM则是你要添加的内容。然后就会返回一个值,这个值就是你添加到了哪一行,例如当前控件有7行记录,你执行了一句int index=SendDlgItemMessage(hwnd,ID_DLG_LIST,LB_ADDSTRING,0,(LPARAM)buf);,那么index的值将是8。
那么这一句呢?SendDlgItemMessage(hwnd,ID_DLG_LIST,LB_SETITEMDATA,(WPARAM)index,(LPARAM)ntimes);
这句话的作用是给指定行添加额外的数据,这个数据是不会显示出来的,如果你给第2行发送了LB_SETITEMDATA消息的话,那么你再对第二行发送LB_GETITEMDATA,就会得到刚才设置的内容。
那个WINAPI是一个宏,其实是__stdcall,是一个调用约定,引用别的贴子
__stdcall实际上是Microsoft对编译器的一个扩展,任何一个支持开发Win32应用程序的编译器都会对此或与此等价的选项。用__stdcall标记的函数将使用标准的调用约定,即这些函数将在返加调用者之间将参数从栈中删除。常规的C/C++调用约定中,栈的清理工作则是由调用者完成的。大多数其他的编程语言,如VB缺省情况下使用的也是标准的调用约定。另外用此方法的原因是早期的Windows是运行于640KB系统上的
如果你的ListBox设置了Sort这个样式后,每次插入后的index可能不是按顺序排下来的,因为每次插入时,都会进行排序,所以未必是插在最后面的