On Sunday, 27 January 2013 at 14:06:00 UTC, rsk82 wrote:
Ok, nevermind, found, it, it was so easy that it simply didn't have to had an example:

    struct WNDCLASSEXW {
      UINT      cbSize;
      UINT      style;
      WNDPROC   lpfnWndProc;
      int       cbClsExtra;
      int       cbWndExtra;
      HINSTANCE hInstance;
      HICON     hIcon;
      HCURSOR   hCursor;
      HBRUSH    hbrBackground;
      LPCWSTR   lpszMenuName;
      LPCWSTR   lpszClassName;
      HICON     hIconSm;
    }

If you find yourself desiring other bindings of the win32 api and don't want them to define them by hand, a project was started some time ago by Stewart Gordon that contains an almost complete set of bindings: http://dsource.org/projects/bindings/wiki/WindowsApi

Set the import directory of your compiler appropriately and use it like that: import win32.winuser; //example, where you will probably find wndclassexw

Additionnally, you should know that SOMETHINGA and SOMETHINGW means something like ascii and wide chars (UCS-2, so every char is two bytes instead of one). Normally, the api was intented to be used without the extra letter at the end:

WNDCLASSEX wndclass; //No suffix: defaults to ascii.

When people compile with the preprocessor Unicode defined, then all aliases are mapped to their W counterpart. What changes is how you pass and receive strings.
Keep in mind they must be null terminated (as in C).

The microsoft bunch also defined another macro that would help you make your code independant of the version used, it is called TCHAR. TCHAR * someString; //Will be char * without unicode or wchar with. someString = "My window class".toUTFz!( TCHAR * ); //This is how I use the std library to convert my strings. Try to keep a handle on strings that might be kept by the OS, to prevent them from being garbage collected.

WNDCLASSEX wndclass;
...
wndclass.lpszClassName = someString;

Peace,
Phil

Reply via email to