The following code will populate a listbox with the PROPERTY of REQLISTBOX. You will need to retrieve the information that you would like to display and substitute it for the ListAddString value. The example has hard coded values. I have tested this and it correctly populates the list box. I am not exactly sure what you meant by selecting a default item and then get the item back? Hope this helps.
listID = ListCreate(STRINGLIST);
if (listID = LIST_NULL) then
MessageBox("Unable to create list", SEVERE);
abort;
endif;
szQuery = "Select * FROM ListBox";
hDatabase = MsiGetActiveDatabase(hMSI);
nReturn = MsiDatabaseOpenView(hDatabase, szQuery, hView);
szPropertyValue = "test";
szPropertyValue1 = "test1";
szPropertyValue2 = "test2";
ListAddString(listID, szPropertyValue, AFTER);
ListAddString(listID, szPropertyValue1, AFTER);
ListAddString(listID, szPropertyValue2, AFTER);
nSize = ListCount(listID);
cnt = 1;
ListGetFirstString ( listID , svString );
while (cnt <= nSize)
ListCurrentString(listID, svString);
nOrder = cnt;
szText = svString;
svValue = szText;
szProperty = "REQLISTBOX";
hRecord = MsiCreateRecord(4);
MsiRecordSetString(hRecord, 1, szProperty);
MsiRecordSetInteger(hRecord, 2, nOrder);
MsiRecordSetString(hRecord, 3, svValue);
MsiRecordSetString(hRecord, 4, szText);
nReturn = MsiViewModify(hView, MODIFY_INSERT_TEMPORARY, hRecord);
cnt=cnt + 1;
ListGetNextString ( listID , vString );
endwhile;
end;