setDialogItem method

int setDialogItem(
  1. {required int style,
  2. int dwExtendedStyle = 0,
  3. required int x,
  4. required int y,
  5. required int cx,
  6. required int cy,
  7. required int id,
  8. int windowSystemClass = 0,
  9. String windowClass = '',
  10. String text = '',
  11. List<int> creationDataBytes = const []}
)

Sets the memory at the pointer location to the dialog item supplied.

Returns the number of WORDs written.

Implementation

int setDialogItem({
  required int style,
  int dwExtendedStyle = 0,
  required int x,
  required int y,
  required int cx,
  required int cy,
  required int id,
  int windowSystemClass = 0,
  String windowClass = '',
  String text = '',
  List<int> creationDataBytes = const [],
}) {
  /// Size in 16-bit WORDs of the DLGITEMTEMPLATE struct
  const dlgItemTemplateSize = 9;

  final ptr = cast<Uint16>();
  var idx = 0; // 16-bit index offset

  /// Specifies the properties of the DLGITEMTEMPLATE structure.
  ptr.cast<DLGITEMTEMPLATE>().ref
    ..style = style
    ..dwExtendedStyle = dwExtendedStyle
    ..x = x
    ..y = y
    ..cx = cx
    ..cy = cy
    ..id = id;
  idx += dlgItemTemplateSize;

  // Immediately following each DLGITEMTEMPLATE structure is a class array
  // that specifies the window class of the control. If the first element of
  // this array is any value other than 0xFFFF, the system treats the array as
  // a null-terminated Unicode string that specifies the name of a registered
  // window class. If the first element is 0xFFFF, the array has one
  // additional element that specifies the ordinal value of a predefined
  // system class.
  //
  // The ordinal can be one of the following atom values:
  // - 0x0080: Button
  // - 0x0081: Edit
  // - 0x0082: Static
  // - 0x0083: List box
  // - 0x0084: Scroll bar
  // - 0x0085: Combo box
  if (windowClass.isNotEmpty) {
    idx += ((ptr + idx).cast<Utf16>().setString(windowClass) / 2).ceil();
  } else {
    ptr[idx++] = 0xFFFF;
    ptr[idx++] = windowSystemClass;
  }

  // Following the class array is a title array that contains the initial text
  // or resource identifier of the control.
  idx += ((ptr + idx).cast<Utf16>().setString(text) / 2).ceil();

  // The creation data array begins at the next WORD boundary after the title
  // array. This creation data can be of any size and format. If the first
  // word of the creation data array is nonzero, it indicates the size, in
  // bytes, of the creation data (including the size word).
  if (creationDataBytes.isNotEmpty) {
    ptr[idx++] = creationDataBytes.length + 1;
    (ptr + idx)
        .cast<Uint8>()
        .asTypedList(creationDataBytes.length)
        .setAll(0, creationDataBytes);
    idx += (creationDataBytes.length / 2).ceil();
  } else {
    ptr[idx++] = 0x0000;
  }

  // Move idx forward so that it aligns to the next DWORD boundary
  if ((ptr.address + idx) % 2 != 0) {
    ptr[idx++] = 0x0000;
  }
  return idx;
}