DCX - Dialog Control Xtension
This DLL lets you add new controls to mIRC dialogs as well as change other features like the visual style, position etc...
DCX does not support mIRC controls (NOT EVEN mIRC TABS), nor anything related to mIRC normal dialogs except it's menus. DCX does not work like MDX so please read the manual and see dcx_demo.mrc and dcx_tools.mrc for examples.
DCX v3.1+ only works on mIRC v7+, Try & use the latest mIRC if possible (v7.65 at the time of writing)
The DLL creates the controls directly on the mIRC dialog and you use clone functions defined by /xdid and $xdid which behave like the regular /did and $did to interact with the controls.

The event handling in the DLL is supported by a callback alias supplied by the user when the dialog is marked before adding DCX controls. The callback alias is called from within the DLL to ask for info (if you want to modify the default behavior in the DLL thus the "callback" type) and will supply the user with the events and parameters of these events.

Every function in this DLL returns a value if used with the $dll identifier. D_OK [function]: [message] if successful, D_ERROR [function]: [message] otherwise.
  • Mandatory parameters are expressed in [SQUARE] brackets and optional parameters in (ROUNDED) brackets.
  • We strongly suggest you load the dcx_tools.mrc file included in the zip as it contains the necessary /xdialog, /xdid, /xdock, /xtray, /xstatusbar, /xtreebar and /xmenubar aliases and identifiers needed to use the DLL.
  • Function calls, styles, and references to anything DCX related are all case sensitive!
For advanced support for images (such as extra file formats and drawing routines), Microsoft has released a library called GDI+. This is included in Windows XP, however older versions of Windows may not have this.

Use $dcx(IsUsingGDI) to check whether or not you have GDI+ support on your computer. If you do not, you can download it here.
Callback Alias Events
Every DCX Control fires events upon user action on the control. These events are sent to an alias specified when the dialog is Marked.

Why are the events not sent like regular on *:DIALOG: events?
Well for one thing, mIRC events are linear and static in the way that you cannot return any value to the event manager, to modify the default behavior of the event. Using callback support with an alias enables this type of interaction.

Callback Event Data
Format: [NAME] [EVENT] [ID] [PARAM]
NAME $1 = Name of the dialog that the event came from.
EVENT $2 = Name of the event (eg. sclick, dclick, ...)
ID $3 = ID of the control that fired the event.
PARAM $4- = Additional information, event specific (usually $null, except specified otherwise in documentation)
Note. Some control events support return values to change their default behaviour. When returning special values during certain events, such as nosize for sizing, interact with the DLL and modify the default event behavior. The events that support a return value will have a description of what the return value does when returned.
Latest Changes
If you notice any inconsistancies or errors with the documentation, please put a post on the forum on this thread!

  • New features
    1. general - changed /xdid & $xdid() to support named id's
    2. comboex - $xdid(dname,id,0).text now works with dropdown style controls as well as dropedit ones.
    3. dialog - changed /xdialog -d to accept named id's
    4. box/pager - changed /xdid -d to support named id's
    5. dialog - changed /xdialog -j to handle named id's
    6. - changed /xdialog -q to allow setting different cursors for different parts of the dialog, border etc.. added support code for these new cursors.
    7. general - added /dcx SetDCXSettings command, atm this only has two options "StaticColours" & "UpdateColours"
    8. - - StaticColours = /dcx SetDCXSettings StaticColours [1/0]
    9. - - - Enable/Disable static colours (faster drawing but doesn't update its self to changes in mIRC's colour scheme)
    10. - - UpdateColours = /dcx SetDCXSettings UpdateColours
    11. - - - Force dcx to update it' colour scheme even if using static colours.
    12. updown - changed /xdid -c to handle named id's
    13. webctrl - added $xdid().script to allow calling a script that returns a result.
    14. - var %result = $xdid(dname,id,scriptcommand).script
  • Syntax changes
  • Fixes and changes
    1. general - added help text to /xdid/$xdid/$dcx(GetTaskbarPos)/xdialog/$xdialog/xpop/$xpop/xpopup/$xpopup/$xmenubar
    2. - changed $dcx(Version) to show the compiled date/time too
    3. general - fixed bug in /xdid -Z where the SCROLLINFO mask wasn't set, causing GetScrollInfo() to always fail.
    4. divider - fixed bug in /xdid -l where controls were not being added correctly.
    5. dcxml - fixed bugs, should all work again
    6. dcxml - changed code to add richedit controls contents, so it now changes \c into ctrl-c & \b into ctrl-b & \r into ctrl-r, \u to ctrl-u, \i to ctrl-i, & \o to ctrl-o, this should really be replaced with better utf loading.
  • DCX Project
    1. dcxml - changed richedit code to convert \c to ctrl-k, \b to ctrl-b, \r to ctrl-r, \u to ctrl-u, \i to ctrl-i, & \o to ctrl-o
    2. general - changed some XXX::value's to be XXX_v instead.
    3. scripts - updated dc.xml, changed url's etc...
    4. - updated dcx_demo.mrc & fixed some issues i had with it.
    5. panel - added check to /xdid -l to not enough args.
    6. dcxml - added DCXML_ID_OFFSET to use instead of just using 2000U
    7. - changed code to add richedit controls contents, so it now changes \c into ctrl-c & \b into ctrl-b & \r into ctrl-r, this should really be replaced with better utf loading.
    8. - fixed bug in registerId() where mIRC_ID_OFFSET wasn't being added.
    9. - fixed bug in parseId() where wrong id value was returned.
    10. general - fixed bug in /xdid -Z where the SCROLLINFO mask wasn't set, causing GetScrollInfo() to always fail.
    11. dialog - changed parseComControlRequestEX() to return the control id in the error message when a control can't be found.
    12. divider - fixed bug in /xdid -l where controls were not being added correctly.
    13. project - added build all command to source control.
    14. dcxml - fixed bug in parseControl() where m_sParenttype was used instead of m_sType.
    15. - fixed bug in parseControl() where m_iParentID was used when it should have been m_iID.
    16. - fixed bug in parseStyle()/parseIcons() where the results of Attribute() calls were not checked for nullptr.
    17. project - added $(PHPDir) macro, defaults to c:\php
    18. gsl - updated to latest version on git
    19. dcxdocs - added more details to change list.
    20. - added /xdid -a +wyz info to listview.
    21. directshow - changed getProperty() to take a refString object.
    22. - changed /xdid -v handling to use const vars.
    23. - changed /xdid -a handling to only check the InitWindowlessVMR() result when it was actually called.
    24. string_support - changed _ts_strcpyn() to only check bounds in debug build.
    25. xpopup - changed parseMPopup() to use hashing if enabled.
    26. - changed getMenuByHash()/getMenuByName()/getMenuByHandle() to be noexcept.
    27. dcxdocs - changed the renderer to the latest via the X-UA-Compatible meta.
    28. - changed some links to point at github
    29. - added directshow's author & title properties.
    30. - added directshow's dshow event.
    31. - added note to treeview's /xdid -w command about -1 index.
    32. - added changes upto svn960
    33. - added directshow -v command
    34. - dded some files that were missing after transfer from svn
    35. - started work on updating the docs :)
    36. general - changed usage text for SetDCXSettings command.
    37. xpopup - fixed bug in /xpopup -c & -d where faulty logic was used (oops)
    38. general - added some extra addtok() tests for debug build.
    39. - updated dev rel to 48
    40. - updated todo list.
    41. - removed some commented code.
    42. - changed updateParentCtrl()/getWindowPosition() to be noexcept
    43. - fixed some small errors in controlFactory()->DcxControlTypes::WINDOW code.
    44. calendar - changed where trim() is called in MCN_GETDAYSTATE code.
    45. listview - misc style changes.
    46. dcxml - changed where some vars are initialized.
    47. webctrl - changed CallScript() to initialize ready_state & dispid vars
    48. general - updated version info.
    49. - misc style changes.
    50. - changed $dcx(Version) to show the compiled date/time too
    51. - changed eval()/tsEval()/iEval()/exec() to use the ts_XXX functions.
    52. - changed CopyToClipboard() to return a bool.
    53. - changed ParseLogfontToCommand() to use _ts_sprintf()
    54. - changed CreateGrayscaleIcon() to use Dcx::countof()
    55. - changed unfoldColor() to use _ts_atoi()
    56. - changed AddFileIcons() to only use wrappers when enabled.
    57. modules - disabled a compiler warning.
    58. - changed some constructors to clear vars for us.
    59. string support - reworked isInBounds()
    60. xpopups - changed /xmenubar -s to take an unsigned id.
    61. - added XPMC_MIN/XPMC_MAX to colour selection enum.
    62. - explicitly added XPMS_VERTICAL & XPMS_VERTICAL_REV to DrawItemBackground()
    63. - changed DrawItemSelection()/DrawItemCheckBox()/DrawItemText()/DrawItemIcon()/DrawItemSubArrow()/DrawGradient()/DrawVerticalBar() to take bool arguments instead of BOOL
    65. - changed parseIdentifier() to use hashing if enabled.
    66. - added support for XPMS_BUTTON & XPMS_CUSTOMBIG to $xpop().style
    67. - added getMenuByHash() to lookup a menu based on the names hash.
    68. - changed getMenuByName() to call getMenuByHash() if hashing enabled.
    69. - changed XPopupMenuManager() default constructor to clear everything for us again.
    70. cla - changed LayoutCell::setBorder(const UINT nBorder) -> LayoutCell::setBorder(const int &nBorder)
    71. - changed LayoutCell::setBorder(const int &nBorder) to just call LayoutCell::setBorder(const RECT &rc)
    72. - misc style changes.
    73. xdock - changed signals formatted string to use %u instead of %d
    74. - improved the statusbar drawing code a little.
    75. dcxml - changed /dcxml to use hashing if enabled.
    76. - changed /dcxml to properly check the results of FirstChildElement() for a nullptr result.
    77. trayicon - changed signals to use %u in the formatting string instead of %d
    78. general - updated the dates
    79. - changed $dcx(GetSystemColor)/$dcx(ActiveWindow)/$xpop/xpop to use hashing if enabled.
    80. - fixed bug in /xSignal where trim() was used in the wrong place.
    81. - fixed bug in $dcx(ActiveWindow) where cbSize wasn't being set.
    82. - changed mIRCSubClassWinProc()->WM_SIZE to return unsigned numbers.
    83. gsl - updated to latest.
    84. general - removed is_Numeric struct as this is now in the string_support header.
    85. - added deleted functions to structs
    86. - added dcxNumber struct for testing. (dont use)
    87. trayicon - changed modifyIcon() to use Dcx::countof() instead of a fixed size
    88. listhelper - changed matchItemText() to avoid needing a static_cast
    89. richedit - got rid of some warnings.
    90. divider - added some casts.
    91. dialogcollection - changed the default constructor as = default wasn't initializing things.
    92. xdock - changed $xdock to use string hashing.
    93. - added some static_cast's
    94. tstring - moved all string support functions to a new header string_support.h
    95. - updated macros to use support functions where possible.
    96. - fixed small bug in puttok()
    97. gsl - updated again...
    98. box - improved how the enable/disable button is added.
    99. treeview - changed insertItem() to take a reference instead of a pointer.
    100. - changed matchItemText() to use DcxListHelper::matchItemText()
    101. - changed parsePath() to take a reference TString object instead of a pointer.
    102. general - added some static_cast's
    103. - added TiXmlElement *toXml()
    104. - changed toXml() to properly save the control styles too.
    105. - added DcxIconSizes enum to set standard easy to read icon sizes.
    106. - added NumToIconSize() helper function to allow easy conversion of any number to the enum DcxIconSizes
    107. refString - added __assume() usage to most operators to tell the compiler that m_data will never be null
    108. - misc style changes
    109. simpleString - misc style changes.
    110. gsl - updated to latest version.
    111. hashString - corrected comments.
    112. tinyxml - changed TiXmlDocument::LoadFile() to use unique_ptr.
    113. xdock - changed how InitUltraDock() initializes g_clrTreebarColours
    114. - changed $xdock().dockSide to only use one strcpy call.
    115. misc - changed isRegexMatch() to use a static_cast()
    116. - changed ParseCommandToLogfont() to use countof(lf->lfFaceName)
    117. - changed SystemTimeToMircTime() to correctly pass unsigned args to evalex()
    118. gsl - more updates...
    119. general - improved the testing a little in the debug Version command
    120. xstatusbar - changed $xstatusbar() to use string hashing if enabled.
    121. xtreebar - changed $xtreebar() to use string hashing if enabled.
    122. listview - changed xmlSetItem() to use make_unique()
    123. dcxml - changed parseItems() to avoid some errors in static checking.
    124. tinyxml - fixed some warnings in static checking.
    125. gsl - defined GSL_THROW_ON_CONTRACT_VIOLATION
    126. general - improved the testing done in the debug $dcx(Version) command.
    127. - changed $xdid(BrowseDialog) to use string hashing when enabled.
    128. - changed $xdid(FontDialog) to throw an error when GetObject() fails.
    129. - changed $xdid(Version) to have a debug & non-debug version.
    130. - changed readFile()/SaveDataToFile() to only use wrappers when enabled.
    131. xpopup - added m_clrLightBox to menu colours, this is simply the result of LightenColor(200, m_clrBox) to save us doing the calculation all the time.
    132. - improved the flow of DrawItem() a little.
    133. - changed DrawItemCheckBox() to reset pen after drawing.
    134. - improved the image draw quality for bitmaps in the menus.
    135. - changed /xpopup -c/-d/-i/-l/-p/-s/-t/-x/-R to throw an error if the number of args is wrong or an invalid menu name is used.
    136. general - changed is_Numeric to use std::integral_constant
    137. - added is_Numeric_v shortcut for is_Numeric::value
    138. - deleted older GSL files & changed to new ones without .h
    139. [controls][dialog] - changed all controls to use one CallDefaultProc() function defined in DcxWindow class.
    140. dialog - changed /xdialog -l/-t to use string hashing if enabled.
    141. - improved image quality when drawing a bitmapped dialog background.
    142. directshow - changed /xdid -c to use string hashing if enabled.
    143. listview - changed constructor to use AddStyles()
    144. - changed /xdid -W to use string hashing if enabled.
    145. - changed setHeaderStyle() to use string hashing if enabled.
    146. - changed isListViewStyle() to be noexcept
    147. - changed sortItemsEx() to use ts_strcmp()
    148. [panel][box] - changed /xdid -l to use string hashing if enabled.
    149. tab - changed /xdid -w to only use wrappers if DCX_USE_WRAPPERS is defined.
    150. webctrl - added SafeReleaseCom() function to help release com pointers.
    151. general - changed dcxLoadIcon() to throw an exception if the -P flag is used when the dll has been compiled without GDI+
    152. - added hashing versions of various functions.
    153. xpopup - changed menu constructor to hash the menu name allowing this hash to be used for all compares (big speed up :)
    154. general - added quotes to source control to allow it to work with paths containing spaces.
    155. - changed all dcx_hash(TString.to_chr()) calls to be std:hash<TString>{}(TString) calls as the std::hash overload uses the TString objects built in strlen function.
    156. xswitchflags - +1 not needed
    157. general - changed dcxHDCBitmap2Resource.getBitMap() to return a HBITMAP instead of HBITMAP &
    158. - changed SystemTimeToMircTime() to use a stString
    159. webctrl - changed /xdid -m to use the dcxVariant wrapper when enabled.
    160. xswitchflags - changed to use a 64bit bitmask where each bit maps to a char.
    161. general - added include cguid.h for webctrl
    162. webctrl - added CallScript() function to handle all calls to scripts in the html.
    163. - changed the script calling method to use eval() instead of execScript
    164. - added $xdid().script to allow calling a script that returns a result.
    165. general - added dcxVariant wrapper for VARIANT that calls VariantInit()/VariantClear() for us.
    166. - updated README.md
    167. - bumped dev build to 46.
    168. dcxml - changed the _ts_strncmp(...,16) calls to be _ts_strcmp()
    169. - changed all lstrcmpA() calls to be _ts_strcmp()
    170. - added string hash versions of most repetitive string compares.
    171. - fixed bug in parseItems() which incorrectly handled list controls & caused all following controls to not be handled correctly.
    172. - changed parseTemplate() to get attribute "name" before the loop.
    173. controls - changed parseInfoRequest() to take a refString szReturnValue.
    174. - added string hash versions of most repetitive string compares.
    175. general - changed mark command to use a refString for the return value.
    176. - disabled switch objects
    177. refString - changed [] operator to use ptrdiff_t
    178. general - changed /dcx setDCXSettings to use std::hash overload for TString.
    179. - changed $dcx(ColorDialog) to use a bool for retDefault, & to use std::hash overload for TString.
    180. - updated VisualCppTools beta in use.
    181. - updated sourcecontrol project files...
    182. tstring - added _ts_strcmp() function
    183. xtreebar - changed /xtreebar -w to only use wrappers when enabled via DCX_USE_WRAPPERS define.
    184. - changed $xtreebar().item to use stString
    185. mirclinker - changed isAlias() to take a TString arg, changed the code which calls this to reflect the change.
    186. general - added solution files for VS2015
    187. - added TODO.txt
    188. general - changed all const_hash() calls to dcx_hash()
    189. hashString - added std::hash for TString, const char *, & const wchar_t *
    190. - added crc32_helper() constexpr function, this function handles all compile time crc32 generation
    191. - added a wchar_t version of crc32_helper()
    192. - removed a lot of unused commented code.
    193. - added crc32_1byte() to handle all non-compile time crc32 generation.
    194. - added dcx_hash() function templates that simply call crc32_1byte()
    195. dcxml - changed parseCLA() to use string hashing when enabled.
    196. general - changed code to use std::max() & std::min() instead of the macros, macros are undefined now.
    197. dcxml - changed parseAttributes() to use _ts_strncmp()
    198. refstring - changed empty() to check for a nullptr too
    199. - changed clear() to check if string is empty() before clearing.
    200. stacker/statusbar/tab/toolbar/trackbar/updown - changed parseControlStyles() to use string hashing if enabled.
    201. dcxml - changed /dcxml -p/parseControl()/parseDialog() to use string hashing if enabled.
    202. - renamed g_resetcla to g_bResetCLA & made it a bool.
    203. - fixed bug in parseDialog() handling box type twice.
    204. refstring/simplestring - changed static_assert for type to remove const'ness first.
    205. pager/progressbar/richedit - changed parseControlStyles() to use string hashing if enabled.
    206. mwindow/pager/panel/progressbar/rebar/richedit/statusbar/tab/toolbar/trackbar - misc style changes
    207. progressbar - changed DrawClientArea() to use Auto()
    208. rebar - changed to use the DcxWindow::createImageList()
    209. richedit - changed constructor to initialize m_bIgnore... vars
    210. - changed the m_bIgnore... vars to be bool
    211. stacker - changed how m_vImageList is initialized.
    212. - changed $xdid().haschild/childid to only need a single string copy.
    213. - changed to use Gdiplus::
    214. statusbar - changed the constructor to initialize m_vParts.
    215. - changed deletePartInfo() to use eraseIfFound()
    216. - changed /xdid -w to use dcxIconResource if enabled.
    217. - changed to use DcxWindow::createImageList()
    218. - changed setPartInfo() to use gsl::owner.
    219. - changed getRect() to use gsl::not_null
    220. - changed getIcon() to return HICON
    221. tab - changed to use DcxWindow::createImageList()
    222. toolbar - changed /xdid -a to use TSTABCHAR
    223. - changed to use dcxException's
    224. - changed /xdid -w to use dcxIconResource if enabled.
    225. trackbar - changed DrawTrackBarPart() to use dcxHDCBitmapResource if enabled.
    226. button/calendar/comboex/datetime - change parseControlStyles() to use string hashing if enabled.
    227. calender - changed how m_MonthDayStates() is initialized.
    228. - changed /xdid -r to use to_<long>() instead of to_num()
    229. - changed MCN_GETDAYSTATE to use evalAliasT() & TSCOMMACHAR
    230. colorcombo/divider/ipaddress - misc style changes.
    231. comboex - changed how m_tsSelected is initialized.
    232. - changed class to use DcxListHelper.
    233. directshow - changed /xdid -a to set m_bLoop directly instead of using an if/else
    234. - changed how /xdid -v set stores the values.
    235. - changed getProperty() to use %ws with _snwprintf() instead of %lS
    236. listview - changed parseListviewExStyles() to use string hashing when enabled.
    237. dialog - misc style changes
    238. - added parseInfoRequest2() as a temp measure till everythings fixed to take the refString arg (parseInfoRequest() now just calls this)
    239. - added evalAliasT() as future replacements for evalAlias() & evalAliasEx() (work in progress)
    240. - changed to use Gdiplus::
    241. - changed var namedIds to m_NamedIds
    242. - changed var m_bDoGhostDrag to m_uGhostDragAlpha
    243. - added i_showError() to show error msg's, this may be removed/changed soon
    244. - changed parseBorderStyles()/parseBkgFlags()/parseFlashFlags()/parseTooltipFlags()/PreMultiply() to be noexcept
    245. - changed deleteControl() to use eraseIfFound()
    246. - changed /xdialog -x to not need a string any more.
    247. - changed /xdialog -z to use Dcx::find()
    248. - fixed bug in /xdialog -R where m_Region was checked for != nullptr when it should have been == nullptr
    249. - changed a lot of execAliasEx() calls to execAlias()
    250. - changed WM_DROPFILES/DrawCaret() to use stString
    251. - changed DrawDialog()/DrawCtrl() to use dcxHDCBitmap2Resource when enabled.
    252. - changed UnregisterDragList() to use eraseIfFound()
    253. - changed toXml() to do some nullptr checks.
    254. webctrl - changed SafeRelease() to be noexcept
    255. - changed constructor to make sure everything is initialized correctly.
    256. - changed constructor to use Auto()
    257. - changed constructor to use dcxBSTRResource when enabled.
    258. - commented out call to SafeRelease() in destructor as this was causing a double release exception & crash when some versions of IE were used. (this still needs investigated further)
    259. - changed all BSTR allocations to use dcxBSTRResource instead, when enabled.
    260. - changed Invoke() to use Auto()
    261. - changed DISPID_BEFORENAVIGATE2/DISPID_NEWWINDOW2 to use stString
    262. treeview - changed to use Gdiplus::
    263. - changed /xdid -Q/insertItem() to use dcx_testflag() to directly set the stored value.
    264. - changed sortItemEx() to use stString
    265. - fixed bug in NM_CLICK caused by the inappropriate use of dcx_testflag()
    266. - changed CDDS_ITEMPAINT to use CLR_INVALID instead of -1
    267. window - added createImageList() for use by all controls, should be used to replace control specific versions where possible.
    268. cla - misc style changes.
    269. - changed LayoutManager class to use = default constructor/destructor.
    270. - changed LayoutManager::setRoot() to use gsl::owner
    271. - changed LayoutManager::getRoot() to be noexcept
    272. - changed LayoutManager::AddCell() to use unique_ptr.
    273. - reworked some of the logic in AddCell() to be a bit simpler.
    274. - changed LayoutCellPane::addChild() to LayoutCell * addChild(gsl::owner<gsl::not_null<LayoutCell *>> p_Cell, const UINT nWeight)
    275. - changed LayoutCell::getType()/getClientRect()/getBorder()/getFirstChild()/getParent()/getNextSibling() to be noexcept
    276. simpleString - changed default constructor as static analysis complains about uninitialized memory.
    277. hashString - trying various different hashing methods...
    278. general - changed ColorDialog()/MsgBox() to use string hashing when enabled.
    279. [text][radio][list][line][edit][check][box] - changed parseControlStyles() to use string hashing when enabled.
    280. general - misc style changes.
    281. check - changed DrawClientArea() to use Auto()
    282. box - changed $xdid().inbox to use Auto()
    283. - added a check to toXml() for m_pLayoutManager being nullptr
    284. - changed some TCHAR buffers to be stString's
    285. general - misc style changes.
    286. link - changed /xdid -l a little.
    287. - changed how the constructor initializes the vars.
    288. line - changed DrawClientArea() to use Auto()
    289. image - changed to use Gdiplus::
    290. - changed DrawBMPImage() to use Auto()
    291. - changed DrawBMPImage() to use resource wrappers when enabled.
    292. - changed DrawClientArea() to use Auto()
    293. edit - changed /xdid -S to initialise iend to istart.
    294. - changed some TCHAR buffers to be stString's
    295. listhelper - changed matchItemText() to take a refString arg.
    296. list - changed matchItemText() to make sure the buffer was at least MIRC_BUFFER_SIZE_CCH in size.
    297. listview - misc style changes.
    298. - changed to use ListHelper.
    299. - changed parseControlStyles() to use hashing when enabled.
    300. - changed $xdid().sel to use TSCOMMACHAR
    301. - fixed a bug in $xdid().mouseitem where dcx_testflag() was used inappropriately.
    302. - changed /xdid -a to use TSTABCHAR
    303. - changed /xdid -k to use TSCOMMACHAR
    304. - added a check to /xdid -W for index being > 0
    305. - changed how NM_HOVER is reported.
    306. - changed some TCHAR buffers to be stString instead.
    307. - changed how LVN_ITEMCHANGED is reported. (still testing)
    308. - changed NM_RCLICK to be a little simpler.
    309. - changed CreatePbar() to use _ts_sprintf()
    310. [scroll][radio][list] - misc style changes.
    311. radio - changed DrawClientArea() to use Auto()
    312. list - changed class to use ListHelper
    313. - changed /xdid -c/-m to use TSCOMMACHAR
    314. - changed ParentMessage() for drag & drop to use stString
    315. - changed UpdateHorizExtent() to use Auto()
    316. text - changed DrawClientArea() to use Auto()
    317. - changed protected class data to private
    318. tinyxml - misc changes.
    319. xpopup - changed XPopupMenuWindow/XPopupMenuManager class to use default constructor/destructor.
    320. - changed parseIdentifier()/parseXPopIdentifier()/parseXMenuBarInfo() to take a const &refString<TCHAR, MIRC_BUFFER_SIZE_CCH> arg.
    321. - changed isPatched() to be a constexpr
    322. - changed parseTrackFlags() to be noexcept.
    323. - changed parseIdentifier() case 5 to use stString<MIRC_BUFFER_SIZE_CCH> instead of a TString.
    324. - changed deleteMenu()/deleteMenuItemData()/removeFromMenuBar() to use eraseIfFound()
    325. - changed LightenColor()/DarkenColor() to be noexcept.
    326. dcx - added make_bstr()/dcxBSTR_t/dcxBSTRResource to handle BSTR resources.
    327. - added make_filehandle()/dcxHandle_t/dcxFileHandleResource to handle HANDLE resources for files.
    328. - changed DcxResource to be constexpr
    329. - added dcxStringResource for testing, don't expect to use it.
    330. - added dcxHDCBitmap2Resource which handles an HDC & Bitmap resource pair.
    331. - changed dcxHDCBuffer to use dcxHDCBitmap2Resource instead of dcxHDCResource.
    332. - removed isFile()
    333. - changed mark() to take a const &refString<TCHAR, MIRC_BUFFER_SIZE_CCH> arg instead of a TCHAR *const.
    334. - added Dcx::setting_bStaticColours
    335. - changed Dcx::error() to use _ts_sprintf()
    336. - changed mark() to directly call SetVerbose() with the result of evalAliasEx()
    337. modules - changed DcxModule::load() to be a pure virtual.
    338. - changed the DcxModule, DcxGDIModule, DcxUXModule constructors to be = default
    339. shelldialogs - changed dcxPickIconDlg() to take a const reference
    340. - changed $dcx(PickIcon) to use stString<MAX_PATH +1> sIconPath.
    341. - changed FileDialog() to use an allocated make_unique() buffer.
    342. - changed FileDialog() to use string hashing when enabled.
    343. - changed FileDialog() to use _ts_strlen() instead of lstrlen()
    344. - changed BrowseDialog() to use TSTABCHAR
    345. controls - removed showErrorEx() & replaced it with a showError() template
    346. - added m_UserID var to contain ID - mIRC_ID_OFFSET
    347. - changed getUserID() to return m_UserID as a const reference.
    348. - changed /xdid -R +r to initialize radius to 20.
    349. - changed parseGlobalInfoRequest() to return a bool & take a const &refString<TCHAR, MIRC_BUFFER_SIZE_CCH> arg instead of TCHAR *const
    350. - changed $xdid().pid to use stString<257> when getting the class name.
    351. - changed controlFactory() for DcxControlTypes::WINDOW to use Dcx::countof()
    352. - changed showError() to use _ts_sprintf()
    353. - changed CommonMessage() for WM_DROPFILES to use stString<500> sFilename & stString<20> sRet.
    354. general - changed IsUsingGDI()/IsUnloadSafe()/IsThemedXP() to use dcx_truefalse()
    355. - changed /xdid to use TSCOMMACHAR
    356. - changed /xdid to return 1 on success instead of 3
    357. - added help text to /xdid/$xdid/$dcx(GetTaskbarPos)/xdialog/$xdialog/xpop/$xpop/xpopup/$xpopup/$xmenubar
    358. - changed /dcx WindowProps +t to use TSTABCHAR
    359. - changed /dcx SetmIRCCursors to use TSCOMMACHAR
    360. - added /dcx SetDCXSettings command, atm this only has two options "StaticColours" & "UpdateColours"
    361. - - StaticColours = /dcx SetDCXSettings StaticColours [1/0]
    362. - - - Enable/Disable static colours (faster drawing but doesn't update its self to changes in mIRC's colour scheme)
    363. - - UpdateColours = /dcx SetDCXSettings UpdateColours
    364. - - - Force dcx to update it' colour scheme even if using static colours.
    365. general - changed GetDirectXVersionViaFileVersions() to initialize all vars & to use Dcx::countof()
    366. - changed defines.h to include the new string stuff
    367. - added DCX_USE_HASHING define to enable the use of string hashes.
    368. - added the mIRC_PALETTE_SIZE define.
    369. - changed LOADINFO to use using instead of typedef.
    370. - changed dcx_strcpyn() to take a const reference.
    371. - changed dcx_ConRetState() to return a bool.
    372. hashString - added some comments
    373. simpleString - added some comments
    374. refString - added some comments
    375. - added two static_assert's
    376. mdialog - changed m_DeleteByDestroy to be bool.
    377. dcxml - changed alot of var names to avoid confusion. This also allowed me to clean up some functions & make them clearer.
    378. - changed the constructor & destructors to be = default.
    379. tstring - added a waring about needing VS 2015 or better to compile.
    380. - changed pair & tuple constructors to use references.
    381. - added some comments to constructors.
    382. - added templated version of find()/replace()/mreplace()
    383. - improved _ts_strlen()
    384. - added _ts_strnlen(), _ts_find(), _ts_strcpyn(), _ts_strncat(), _ts_strncmp()
    385. - replaced calls to strstr() with _ts_find()
    386. - added comments for numtok()
    387. - moved some code around to make it clearer.
    388. GSL - updated to the latest on git
    389. general - updated license.txt date to 2016
    390. - changed SystemTimeToMircTime() var ret to be sRet
    391. - changed dcx_round() a little.
    392. - changed ParseCommandToLogfont() to return a bool.
    393. - changed ParseCommandToLogfont() to use Auto().
    394. - changed dcxLoadIcon()/dcxLoadBitmap()/GetLastStatusStr() to specify the Gdiplus namespace where used.
    395. - changed CreateGrayscaleIcon() to initialize the var sz all in one line.
    396. - changed IsFile() to use dcxStringResource
    397. - added getmIRCPalette() overload with no args, this only fills the palette when its empty.
    398. - changed getmIRCPalette() (with args) to only fill the palette if its empty or static colours aren't being used.
    399. - changed DrawRotatedText() to use Auto()
    400. mirclinker - removed mIRCLinker:: from the start of functions.
    401. dialogcollection - changed the constructor/destructor to be = default.
    402. - changed deleteDialog() to use eraseIfFound()
    403. general - added refString.h, simpleString.h, hashString.h/cpp, switchObjects.h, ListHelper.h/cpp
    404. - refString.h -> refString class allows encapsulating a C-String to enforce length rules etc.. without making any additional allocations.
    405. - simpleString.h -> simpleString class wraps & allocates a C-String to enforce length rules etc..
    406. - hashString.h -> Includes various functions to change a C-String into a hash value.
    407. - switchObjects.h -> allows using objects in a special Switch() command.
    408. - ListHelper.h/cpp -> DcxListHelper class includes various common helper functions for DcxList.... controls.
    409. updown - changed /xdid -c to handle named id's
    410. - changed /xdid -c to check DcxControlTypes instead of getting the class name.
    411. Changed everything to require C++14 when compiling
    412. Dropped all support for < Windows7
    413. listview - added xSaveListview() function & started work on /xdid -S to allow saving a listviews contents.
    414. general - removed usage of AggressiveOptimize.h as it was breaking VS2015 code.
    415. - removed some commented code
    416. tstring - removed alternate code to TSTRING_PARTS & TSTRING_ITERATOR & TSTRING_TEMPLATES
    417. - removed code for < vs2015
    418. - removed some commented code.
    419. - changed _ts_sprintf() to always clear() the result first.
    420. xdock - changed to use dcxException.
    421. - changed to use SwitchBarPos::... where appropriate.
    422. - removed some old code.
    423. general - changed to use dcxException
    424. - removed some old code.
    425. - changed all CTRL_XXX defines to be UINT64's
    426. - added enum DcxAllowControls to maybe replace defines in future.
    427. - changed enum DcxControlTypes to be enum class DcxControlTypes
    428. - added dcxExtractIcon object to wrap calls to ExtractIconEx()
    429. - added dcxHDCBuffer as a possible replacement for CreateHDCBuffer()
    430. - changed enum SwitchBarPos to be a class
    431. - changed dcx_strncmp() to use a static_cast
    432. - rewrote GetHwndFromString(TString...) to do all the stuff the TCHAR version used to do...
    433. - commented out GetHwndFromString(TCHAR *..) as its not needed any more.
    434. - changed dcx_strcpyn() to be an inline function.
    435. - changed TGetWindowText() to only add 2 to the strlen at the start
    436. - added nullptr checks to isRegexMatch()/AddFileIcons()/MakeTextmIRCSafe()
    437. - rewrote AddFileIcons() to use dcxExtractIcon
    438. - changed FindOwner() to check if data is empty at the start.
    439. gsl - updated to latest files.
    440. - testing some gsl usage owner<> & not_null<>
    441. dialog - added NameToUserID() to convert a name into a UserID if it exists (returns zero on fail)
    442. colorcombo - changed setmIRCPalette() to use unique_ptr.
    443. comboex - added TString m_tsSelected to store currently selected item.
    444. - changed $xdid(dname,id,0).text to use m_tsSelected.
    445. - changed CBN_SELENDOK handling to set m_tsSelected.
    446. -- this allows $xdid(dname,id,0).text to work with dropdown style controls as well as dropedit ones.
    447. listview - added ItemToString() function to help with saving data.
    448. box - fixed bug in /xdid -c command where the correct addControl() call wasn't being used this caused subsequent calls to fail when using named id's
    449. xtreebar - changed the setitem callback to be for release build too now
    450. - changed setitem callback to have these args: $xtree_callback(<item type>,<wid>,<status>)
    451. xstatusbar - changed status_getImageList() to be noexcept.
    452. - removed some commented code
    453. tstring - changed zero size constructor to always allocate a minimal string anyway.
    454. dialog - changed iNamedId()/NameToID()/NameToUserID() to allow finding an id based on the name or the numerical id.
    455. - added deleteNamedID() which deletes the named id based on either the name or the numerical id.
    456. - changed deleteControl() to call deleteNamedID() as well
    457. general - changed some code to use the new dcxResource stuff (Testing this method out, may not keep)
    458. tstring - fixed bug in compare() routines where length limit was used when it shouldn't have been, this led to "5" == "50"
    459. general - added DCX_USE_WRAPPERS define to enable/disable using the resource wrapper classes.
    460. - added Dcx::dcxResource::pointer type.
    461. - added Dcx::dcxResource::element_type type.
    462. - added Dcx::dcxResource::return_type type.
    463. - changed controlFactory() to use a switch() statement.
    464. dialog - removed some commented code.
    465. - changed /xdialog -q to use getnexttok()
    466. - changed /xdialog -S to not use a POINT structure.
    467. - changed WM_SETCURSOR handling to allow setting the cursor for the whole dialog, not just the client area.
    468. general - changed dcx_strcpyn() to take a const reference for the size arg.
    469. bumped dev build to 43
    470. removed commented exceptions code.
    471. comboex/list/listview/treeview - changed controls to use a general DcxSearchTypes enum instead of repeating the same thing for each control.
    472. - changed matchItemText() to takes a TString ref object instead of a pointer.
    473. list - fixed bug in matchItemText() that caused all the match functions to be called.
    474. general - removed some commented code.
    475. box - changed DrawClientArea() to use the Auto() macro.
    476. list/treeview - changed $xdid().find to do a TCHAR compare instead of a string compare.
    477. tstring - added test code getnexttokas<type>() template to allow TStringObj.getnexttokas<int>() instead of TStringObj.getnexttok().to_<int>()
    478. dialog - removed some commented code.
    479. tstring - added literal operator for WCHAR strings L""_ts
    480. - removed try/catch from charToWchar(), function now throws an exception of allocation failure.
    481. - fixed memleak in constructors.
    482. - added ts_strlenA()/ts_strlenW() macros
    483. - added TString(const WCHAR *const cString, const size_t iLen) constructor & a char * equivalent.
    484. - changed WCHAR * & char * & TString & constructors to simply call the TString(const WCHAR/char *const cString, const size_t iLen) constructor.
    485. - added TString(const T (&cString)[N]) constructor.
    486. - changed TString(const TCHAR *const pStart, const TCHAR *const pEnd) constructor to be a template that just calls the appropriate TString(const WCHAR/char *const cString, const size_t iLen) constructor.
    487. - moved most constructors to the tstring.h file.
    488. - changed the operator[] code to have a debug version that has some extra checks & throws an exception & a release version that doesn't.
    489. - changed the iswm() template to be const noexcept
    490. - commented out the non-const version of c_str()
    491. - changed _ts_WildcardMatch() to be noexcept
    492. xpopupmenu - changed GetMenuAttributeFromXML() to return a TString. This allows us to get rid of some extra TString objects later.
    493. - changed convertMenu() so it doesn't call tsEval() on a seperator.
    494. tstring - added ts_strchr() macro
    495. - added numtok(TCHAR sepChar) to handle all single char separators.
    496. - made both numtok()'s noexcept.
    497. dcxml - changed mIRCEvalToUnsignedInt() to take a TString arg.
    498. tinyxml - changed some code to do nullptr checks
    499. toolbar - changed /xdid -a/-c to use the to_<>() template directly
    500. - changed /xdid -a to use a unique_ptr for DCXBUTTON.
    501. comboex - changed getItemRange() to use the single char version of numtok()
    502. tstring - changed all comparison operators & functions to be noexcept
    503. - changed the move assignment operator to be noexcept
    504. - changed find() to be noexcept
    505. - changed iterator typedef's to use using instead
    506. - changed isin()/isincs()/iswm()/countchar()/ishostmask() to be noexcept
    507. general - changed some typedef's to be using instead.
    508. xdock - changed some typedefs to be using
    509. - changed DockWindow() to allocate & set & push_back() the DCXULTRADOCK structure all in one go (planning on changing how this structure is allocated & stored soon)
    510. xpopup - made XPopupMenu() constructor a bit neater.
    511. - changed parseStyle()/setStyle()/setItemStyle()/setColor()/setDefaultColor()/setSubMenu()/setItemIcon()/getItemText()/getItemIcon()getItemDataBackup()/getmIRCPopup()/getmIRCMenuBar()/isPatched() be be noexcept.
    512. - changed some typedefs to be using instead.
    513. general - changed dcx_truefalse()/dcx_testflag() to be noexcept
    514. gsl - updated to latest
    515. general - changed modules to use VersionHelpers.h
    516. tinyxml - updated to use noexcept & deleted operators...
    517. tstring - added last() function which returns a pointer to the end of the string.
    518. - changed len()/length()/size() to return a reference.
    519. - added SPACECHAR/COMMACHAR/TABCHAR defines as single character versions of SPACE/COMMA/TAB
    520. - changed is_Numeric to check type isn't a pointer.
    521. - fixed bug in static string constructor where string length used was one character to long.
    522. - changed operator *() to use strchr() instead of strstr()
    523. - changed addtok() template to use SPACECHAR
    524. - added test code detailed below...
    525. - added constructors for pair_type & tuple_type.
    526. - added gettokenrange() which returns the start, end, & numtoks in a tuple_type.
    527. - added replacements for gettok()/getfirsttok() that use gettokenrange()
    528. - end test code
    529. - added _ts_isEmpty() function template to test if a string/container is empty (supports C Strings & any object with a empty() member function)
    530. tstring - changed new test versions of gettok() & getfirsttok() to be templates.
    531. dialog - changed SetVerbose()/getFocusControl() to be noexcept
    532. - changed some typedef's to be using's instead.
    533. - changed xdialog -R +p to use the single character versions of getfirsttok()/getnexttok()
    534. general - changed gettok()/getfirsttok()/getnexttok()/numtok() to be single character versions where possible.
    535. xdock - added specific deleted operators
    536. general - added some std::to_string() & std::to_wstring() overloads
    537. - added is_Numeric to Dcx namespace
    538. - changed some typedef's to be using's instead.
    539. - added numeric_cast() to Dcx namespace to handle casting anything to a number (if possible) can cast integrals, strings & objects that support implicit conversion to that type.
    540. cla - changed layoutcell to be a little neater.
    541. - changed layoutcellfill to use the layoutcell constructors.
    542. - changed layoutcellpane to use emplace_back() instead of push_back() in addChild()
    543. xmenu - added a deleted default constructor & copy constructor to XMenuBar
    544. - changed isPatched() to be a static function.
    545. general - added eraseIfFound() template function which removes an item from a container if its found, returns true on success.
    546. xdock - added UnDockWindowPtr() function to handle all the removal & deleting work for UnDockAll() & UnDockWindow()
    547. - changed status_deletePartInfo() to use eraseIfFound()
    548. xdock - made sure some vars were properly initialized.
    549. - changed SwitchBarPos() to handle MDI type.
    550. general - made sure some vars were properly initialized.
    551. xTrayIcon - changed GetHwnd() to be noexcept & to return a const reference.
    552. - changed AddIconId() to use emplace_back()
    553. - changed DeleteIconId() to use eraseIfFound()
    554. xdock - changed UnDockWindowPtr()/UnDockAll()/IsStatusbar()/UpdateLayout()/UpdatemIRC() to be noexcept.
    555. - changed FindDock()/GetDock()/isDocked() to be const functions.
    556. - changed DcxDock() constructor to initialize m_VectorDock.
    557. richedit - changed OnNCPaint() to use the Auto() macro.
    558. button - changed most BOOL vars to be bool.
    559. - changed constructor to not need ZeroMemory()
    560. - changed parseColorFlags()/getImageList()/setImageList() to be noexcept
    561. - changed createImageList() to set initial image list size to be countof(m_aBitmaps)
    562. divider - changed some flag checks to use dcx_testflag()
    563. - changed DrawXorBar()/Divider_OnLButtonDown/Up()/Divider_OnMouseMove() to use Auto()
    564. XSwitchFlags - changed member var flags to m_bFlags
    565. - changed member var flags_cap to m_bFlags_cap
    566. - changed constructor to initialize m_bFlags & m_bFlags_cap to false.
    567. - moved operator[] to include file.
    568. - changed m_bFlags & m_bFlags_cap to be private instead of protected.
    569. - added m_bFalse static var for isSet()'s use on failure.
    570. - changed de-constructor to be = default.
  • Documentation
    1. added /xdid -a +wyz info to listview.
    2. added /dcx SetDCXSettings docs.
    3. updated /xdialog -q docs to show all new flags for cursors.
    4. updated support links
    5. added $dcx(CountIcons,[filename])
    6. added listview /xdid -G
    7. added listview /xdid -H
    8. added webctrl $xdid().statusbar/statustext/script
    9. added note to updown /xdid -c to the effect that named id's can be used.
Lead Developer ClickHeRe
Supporting Developers
(in chronological order)
Documentation twig*
Additional libraries  
CWndShadowx Copyright (c) 2006 Perry Zhu
Treebar.dll NaquadaServ
MDX vs DCX Mpdreamz
Demo Script elizio
General Testing
(and forum helpers!)
Tutorials j0x's DCX Tutorials (French)
DCX Forum: Help: CLA
DCX Forum: CLA :(
Mpdreamz's Cell Layout Algorithm Tutorial
EinsteinXXL's CLA Tutorial (German)
Dutch Mpdreamz
Finnish Mkz
French dunkelzahn
German Duplex
Hebrew seec77
Italian Still need someone!
Malaysian da^hype
Portuguese (Brazil) Henrique
Portuguese (Portugal) Theorem
Spanish PaTaGoN
Swedish Rixxon
Website http://dcx.scriptsdb.org
Support #genscripts @ Genscripts
Contact 2005-2022 Last Updated: 19th November, 22

Valid XHTML 1.0 Transitional Valid CSS!