Mercurial > dwindows
comparison os2/dw.c @ 203:e0beea487e8f
Added the basics for scrollbar thumb size on OS/2, and dw_main_iteration()
which runs a message loop until it handles one message and returns. So
other languages can run message loops and call this function internally.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Sat, 01 Feb 2003 07:05:12 +0000 |
parents | b955228477b3 |
children | 767fca804cea |
comparison
equal
deleted
inserted
replaced
202:9f87ad1572eb | 203:e0beea487e8f |
---|---|
1868 | 1868 |
1869 if(msg == WM_BUTTON2DOWN || msg == WM_BUTTON3DOWN) | 1869 if(msg == WM_BUTTON2DOWN || msg == WM_BUTTON3DOWN) |
1870 msg = WM_BUTTON1DOWN; | 1870 msg = WM_BUTTON1DOWN; |
1871 if(msg == WM_BUTTON2UP || msg == WM_BUTTON3UP) | 1871 if(msg == WM_BUTTON2UP || msg == WM_BUTTON3UP) |
1872 msg = WM_BUTTON1UP; | 1872 msg = WM_BUTTON1UP; |
1873 if(msg == WM_VSCROLL || msg == WM_HSCROLL) | |
1874 msg = SLN_SLIDERTRACK; | |
1873 | 1875 |
1874 /* Find any callbacks for this function */ | 1876 /* Find any callbacks for this function */ |
1875 while(tmp) | 1877 while(tmp) |
1876 { | 1878 { |
1877 if(tmp->message == msg || msg == WM_CONTROL || tmp->message == WM_USER+1) | 1879 if(tmp->message == msg || msg == WM_CONTROL || tmp->message == WM_USER+1) |
2238 break; | 2240 break; |
2239 case SLN_SLIDERTRACK: | 2241 case SLN_SLIDERTRACK: |
2240 { | 2242 { |
2241 int (* API valuechangedfunc)(HWND, int, void *) = (int (* API)(HWND, int, void *))tmp->signalfunction; | 2243 int (* API valuechangedfunc)(HWND, int, void *) = (int (* API)(HWND, int, void *))tmp->signalfunction; |
2242 | 2244 |
2243 if(tmp->window == hWnd || WinQueryWindow(tmp->window, QW_PARENT) == hWnd) | 2245 if(origmsg == SLN_SLIDERTRACK) |
2244 { | 2246 { |
2245 static int lastvalue = -1; | 2247 /* Handle Slider control */ |
2246 static HWND lasthwnd = NULLHANDLE; | 2248 if(tmp->window == hWnd || WinQueryWindow(tmp->window, QW_PARENT) == hWnd) |
2247 int ulValue = (int)WinSendMsg(tmp->window, SLM_QUERYSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_INCREMENTVALUE), 0); | |
2248 if(lastvalue != ulValue || lasthwnd != tmp->window) | |
2249 { | 2249 { |
2250 dw_window_set_data(tmp->window, "_dw_slider_value", (void *)ulValue); | 2250 static int lastvalue = -1; |
2251 result = valuechangedfunc(tmp->window, ulValue, tmp->data); | 2251 static HWND lasthwnd = NULLHANDLE; |
2252 lastvalue = ulValue; | 2252 int ulValue = (int)WinSendMsg(tmp->window, SLM_QUERYSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_INCREMENTVALUE), 0); |
2253 lasthwnd = tmp->window; | 2253 if(lastvalue != ulValue || lasthwnd != tmp->window) |
2254 { | |
2255 dw_window_set_data(tmp->window, "_dw_slider_value", (void *)ulValue); | |
2256 result = valuechangedfunc(tmp->window, ulValue, tmp->data); | |
2257 lastvalue = ulValue; | |
2258 lasthwnd = tmp->window; | |
2259 } | |
2260 tmp = NULL; | |
2254 } | 2261 } |
2255 tmp = NULL; | 2262 } |
2263 else | |
2264 { | |
2265 /* Handle scrollbar control */ | |
2266 if(tmp->window = hWnd) | |
2267 { | |
2268 int pos = (int) SHORT1FROMMP(mp2); | |
2269 | |
2270 dw_window_set_data(hWnd, "_dw_scrollbar_value", (void *)pos); | |
2271 result = valuechangedfunc(tmp->window, pos, tmp->data); | |
2272 tmp = NULL; | |
2273 } | |
2256 } | 2274 } |
2257 } | 2275 } |
2258 | 2276 |
2259 break; | 2277 break; |
2260 } | 2278 } |
3071 DosSleep(1); | 3089 DosSleep(1); |
3072 } | 3090 } |
3073 } | 3091 } |
3074 | 3092 |
3075 /* | 3093 /* |
3094 * Processes a single message iteration and returns. | |
3095 */ | |
3096 void API dw_main_iteration(void) | |
3097 { | |
3098 QMSG qmsg; | |
3099 | |
3100 _dwtid = dw_thread_id(); | |
3101 | |
3102 if(WinGetMsg(dwhab, &qmsg, 0, 0, 0)) | |
3103 { | |
3104 if(qmsg.msg == WM_TIMER && qmsg.hwnd == NULLHANDLE) | |
3105 _run_event(qmsg.hwnd, qmsg.msg, qmsg.mp1, qmsg.mp2); | |
3106 WinDispatchMsg(dwhab, &qmsg); | |
3107 } | |
3108 } | |
3109 | |
3110 /* | |
3076 * Free's memory allocated by dynamic windows. | 3111 * Free's memory allocated by dynamic windows. |
3077 * Parameters: | 3112 * Parameters: |
3078 * ptr: Pointer to dynamic windows allocated | 3113 * ptr: Pointer to dynamic windows allocated |
3079 * memory to be free()'d. | 3114 * memory to be free()'d. |
3080 */ | 3115 */ |
5280 /* | 5315 /* |
5281 * Sets the scrollbar range. | 5316 * Sets the scrollbar range. |
5282 * Parameters: | 5317 * Parameters: |
5283 * handle: Handle to the scrollbar to be set. | 5318 * handle: Handle to the scrollbar to be set. |
5284 * range: Maximum range value. | 5319 * range: Maximum range value. |
5285 */ | 5320 * visible: Visible area relative to the range. |
5286 void API dw_scrollbar_set_range(HWND handle, unsigned int range) | 5321 */ |
5322 void API dw_scrollbar_set_range(HWND handle, unsigned int range, unsigned int visible) | |
5287 { | 5323 { |
5288 unsigned int pos = (unsigned int)dw_window_get_data(handle, "_dw_scrollbar_value"); | 5324 unsigned int pos = (unsigned int)dw_window_get_data(handle, "_dw_scrollbar_value"); |
5289 WinSendMsg(handle, SBM_SETSCROLLBAR, (MPARAM)pos, MPFROM2SHORT(0, (unsigned short)range)); | 5325 WinSendMsg(handle, SBM_SETSCROLLBAR, (MPARAM)pos, MPFROM2SHORT(0, (unsigned short)range - visible)); |
5326 WinSendMsg(handle, SBM_SETTHUMBSIZE, MPFROM2SHORT((unsigned short)visible, range), 0); | |
5290 } | 5327 } |
5291 | 5328 |
5292 /* | 5329 /* |
5293 * Sets the spinbutton value. | 5330 * Sets the spinbutton value. |
5294 * Parameters: | 5331 * Parameters: |