Mercurial > dwindows
comparison win/dw.c @ 2236:e7060d262939
Win: Switched to using Rich Edit MLE by default on Windows.
Added DW_FEATURE_MLE_RICH_EDIT option to dw_feature_set() to turn it off.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Tue, 05 Jan 2021 01:52:35 +0000 |
parents | bd642d04d7c6 |
children | 3e9c5bff0a57 |
comparison
equal
deleted
inserted
replaced
2235:bd642d04d7c6 | 2236:e7060d262939 |
---|---|
37 #endif | 37 #endif |
38 #ifdef AEROGLASS | 38 #ifdef AEROGLASS |
39 #include <uxtheme.h> | 39 #include <uxtheme.h> |
40 #endif | 40 #endif |
41 #include <richedit.h> | 41 #include <richedit.h> |
42 | |
43 #ifdef RICHEDIT | |
44 int _DW_MLE_RICH_EDIT = DW_FEATURE_UNSUPPORTED; | |
45 #endif | |
42 | 46 |
43 #define STATICCLASSNAME TEXT("STATIC") | 47 #define STATICCLASSNAME TEXT("STATIC") |
44 #define COMBOBOXCLASSNAME TEXT("COMBOBOX") | 48 #define COMBOBOXCLASSNAME TEXT("COMBOBOX") |
45 #define LISTBOXCLASSNAME TEXT("LISTBOX") | 49 #define LISTBOXCLASSNAME TEXT("LISTBOX") |
46 #define BUTTONCLASSNAME TEXT("BUTTON") | 50 #define BUTTONCLASSNAME TEXT("BUTTON") |
4876 if(!(hmsftedit = LoadLibrary(TEXT("msftedit")))) | 4880 if(!(hmsftedit = LoadLibrary(TEXT("msftedit")))) |
4877 { | 4881 { |
4878 if(!(hrichedit = LoadLibrary(TEXT("riched20")))) | 4882 if(!(hrichedit = LoadLibrary(TEXT("riched20")))) |
4879 hrichedit = LoadLibrary(TEXT("riched32")); | 4883 hrichedit = LoadLibrary(TEXT("riched32")); |
4880 } | 4884 } |
4885 /* Enable Rich Edit by default if supported */ | |
4886 if(_DW_MLE_RICH_EDIT == DW_FEATURE_UNSUPPORTED && (hmsftedit || hrichedit)) | |
4887 _DW_MLE_RICH_EDIT = DW_FEATURE_ENABLED; | |
4881 #endif | 4888 #endif |
4882 #ifdef BUILD_TOAST | 4889 #ifdef BUILD_TOAST |
4883 _dw_toast_init(UTF8toWide(_dw_app_name), UTF8toWide(_dw_app_id)); | 4890 _dw_toast_init(UTF8toWide(_dw_app_name), UTF8toWide(_dw_app_id)); |
4884 #endif | 4891 #endif |
4885 return 0; | 4892 return 0; |
6944 * Parameters: | 6951 * Parameters: |
6945 * id: An ID to be used with dw_window_from_id() or 0L. | 6952 * id: An ID to be used with dw_window_from_id() or 0L. |
6946 */ | 6953 */ |
6947 HWND API dw_mle_new(ULONG id) | 6954 HWND API dw_mle_new(ULONG id) |
6948 { | 6955 { |
6949 | |
6950 HWND tmp = CreateWindowEx(WS_EX_CLIENTEDGE, | 6956 HWND tmp = CreateWindowEx(WS_EX_CLIENTEDGE, |
6951 hmsftedit ? MSFTEDIT_CLASS : (hrichedit ? RICHEDIT_CLASS : EDITCLASSNAME), | 6957 #ifdef RICHEDIT |
6958 _DW_MLE_RICH_EDIT == DW_FEATURE_ENABLED ? (hmsftedit ? MSFTEDIT_CLASS : (hrichedit ? RICHEDIT_CLASS : EDITCLASSNAME)) : EDITCLASSNAME, | |
6959 #else | |
6960 EDITCLASSNAME, | |
6961 #endif | |
6952 NULL, | 6962 NULL, |
6953 WS_VISIBLE | WS_BORDER | | 6963 WS_VISIBLE | WS_BORDER | |
6954 WS_VSCROLL | ES_MULTILINE | | 6964 WS_VSCROLL | ES_MULTILINE | |
6955 ES_WANTRETURN | WS_CHILD | | 6965 ES_WANTRETURN | WS_CHILD | |
6956 WS_CLIPCHILDREN, | 6966 WS_CLIPCHILDREN, |
6966 DestroyWindow(tmp); | 6976 DestroyWindow(tmp); |
6967 return NULL; | 6977 return NULL; |
6968 } | 6978 } |
6969 | 6979 |
6970 #ifdef RICHEDIT | 6980 #ifdef RICHEDIT |
6971 if(hrichedit || hmsftedit) | 6981 if(_DW_MLE_RICH_EDIT == DW_FEATURE_ENABLED && (hrichedit || hmsftedit)) |
6972 cinfo->cinfo.pOldProc = SubclassWindow(tmp, _richeditwndproc); | 6982 cinfo->cinfo.pOldProc = SubclassWindow(tmp, _richeditwndproc); |
6973 else | 6983 else |
6974 #endif | 6984 #endif |
6975 cinfo->cinfo.pOldProc = SubclassWindow(tmp, _simplewndproc); | 6985 cinfo->cinfo.pOldProc = SubclassWindow(tmp, _simplewndproc); |
6976 cinfo->cinfo.fore = cinfo->cinfo.back = -1; | 6986 cinfo->cinfo.fore = cinfo->cinfo.back = -1; |
9366 * state: TRUE if it wraps, FALSE if it doesn't. | 9376 * state: TRUE if it wraps, FALSE if it doesn't. |
9367 */ | 9377 */ |
9368 void API dw_mle_set_word_wrap(HWND handle, int state) | 9378 void API dw_mle_set_word_wrap(HWND handle, int state) |
9369 { | 9379 { |
9370 /* If it is a rich edit control use the rich edit message */ | 9380 /* If it is a rich edit control use the rich edit message */ |
9371 if(hrichedit || hmsftedit) | 9381 if(_DW_MLE_RICH_EDIT == DW_FEATURE_ENABLED && (hrichedit || hmsftedit)) |
9372 { | 9382 { |
9373 SendMessage(handle, EM_SHOWSCROLLBAR, (WPARAM)SB_HORZ, (LPARAM)(state ? FALSE : TRUE)); | 9383 SendMessage(handle, EM_SHOWSCROLLBAR, (WPARAM)SB_HORZ, (LPARAM)(state ? FALSE : TRUE)); |
9374 SendMessage(handle, EM_SETTARGETDEVICE, 0, state ? 0 : 1); | 9384 SendMessage(handle, EM_SETTARGETDEVICE, 0, state ? 0 : 1); |
9375 } | 9385 } |
9376 } | 9386 } |
9392 * point: Point to position cursor. | 9402 * point: Point to position cursor. |
9393 */ | 9403 */ |
9394 void API dw_mle_set_cursor(HWND handle, int point) | 9404 void API dw_mle_set_cursor(HWND handle, int point) |
9395 { | 9405 { |
9396 SendMessage(handle, EM_SETSEL, (WPARAM)point, (LPARAM)point); | 9406 SendMessage(handle, EM_SETSEL, (WPARAM)point, (LPARAM)point); |
9397 if(hrichedit || hmsftedit) | 9407 if(_DW_MLE_RICH_EDIT == DW_FEATURE_ENABLED && (hrichedit || hmsftedit)) |
9398 SendMessage(handle, EM_HIDESELECTION, 0, 0); | 9408 SendMessage(handle, EM_HIDESELECTION, 0, 0); |
9399 SendMessage(handle, EM_SCROLLCARET, 0, 0); | 9409 SendMessage(handle, EM_SCROLLCARET, 0, 0); |
9400 } | 9410 } |
9401 | 9411 |
9402 /* | 9412 /* |
9436 } | 9446 } |
9437 | 9447 |
9438 if(retval) | 9448 if(retval) |
9439 { | 9449 { |
9440 SendMessage(handle, EM_SETSEL, (WPARAM)retval - textlen, (LPARAM)retval); | 9450 SendMessage(handle, EM_SETSEL, (WPARAM)retval - textlen, (LPARAM)retval); |
9441 if(hrichedit || hmsftedit) | 9451 if(_DW_MLE_RICH_EDIT == DW_FEATURE_ENABLED && (hrichedit || hmsftedit)) |
9442 SendMessage(handle, EM_HIDESELECTION, 0, 0); | 9452 SendMessage(handle, EM_HIDESELECTION, 0, 0); |
9443 SendMessage(handle, EM_SCROLLCARET, 0, 0); | 9453 SendMessage(handle, EM_SCROLLCARET, 0, 0); |
9444 } | 9454 } |
9445 | 9455 |
9446 free(tmpbuf); | 9456 free(tmpbuf); |
13783 } | 13793 } |
13784 case DW_FEATURE_DARK_MODE: | 13794 case DW_FEATURE_DARK_MODE: |
13785 { | 13795 { |
13786 if(_DW_DARK_MODE_SUPPORTED) | 13796 if(_DW_DARK_MODE_SUPPORTED) |
13787 return _DW_DARK_MODE_ALLOWED; | 13797 return _DW_DARK_MODE_ALLOWED; |
13798 return DW_FEATURE_UNSUPPORTED; | |
13799 } | |
13800 #endif | |
13801 #ifdef RICHEDIT | |
13802 case DW_FEATURE_MLE_RICH_EDIT: | |
13803 { | |
13804 if(hmsftedit || hrichedit) | |
13805 return _DW_MLE_RICH_EDIT; | |
13788 return DW_FEATURE_UNSUPPORTED; | 13806 return DW_FEATURE_UNSUPPORTED; |
13789 } | 13807 } |
13790 #endif | 13808 #endif |
13791 default: | 13809 default: |
13792 return DW_FEATURE_UNSUPPORTED; | 13810 return DW_FEATURE_UNSUPPORTED; |
13842 return DW_ERROR_NONE; | 13860 return DW_ERROR_NONE; |
13843 } | 13861 } |
13844 return DW_ERROR_GENERAL; | 13862 return DW_ERROR_GENERAL; |
13845 } | 13863 } |
13846 #endif | 13864 #endif |
13865 #ifdef RICHEDIT | |
13866 case DW_FEATURE_MLE_RICH_EDIT: | |
13867 { | |
13868 if(state >= DW_FEATURE_DISABLED && state <= DW_FEATURE_ENABLED) | |
13869 { | |
13870 _DW_MLE_RICH_EDIT = state; | |
13871 return DW_ERROR_NONE; | |
13872 } | |
13873 return DW_ERROR_GENERAL; | |
13874 } | |
13875 #endif | |
13847 default: | 13876 default: |
13848 return DW_FEATURE_UNSUPPORTED; | 13877 return DW_FEATURE_UNSUPPORTED; |
13849 } | 13878 } |
13850 } | 13879 } |
13851 | 13880 |