soui 5.0.0.1
Soui5 Doc
 
Loading...
Searching...
No Matches
SWindow-i.h
1#ifndef __SWINDOW_I__H__
2#define __SWINDOW_I__H__
3
5#include <interface/sstring-i.h>
6#include <interface/SAnimation-i.h>
7#include <interface/SRender-i.h>
8#include <interface/SMatrix-i.h>
11SNSBEGIN
12
13typedef struct ILayout ILayout;
14typedef struct ILayoutParam ILayoutParam;
15typedef struct IWindow IWindow;
16
17/************************************************************************/
18/* 统一定义soui中使用到的自定义消息 */
19/************************************************************************/
20enum
21{
22 UM_SOUI_BEGIN = (WM_USER + 10950),
23 UM_SETSCALE,
24 UM_SETLANGUAGE,
25 UM_SETCOLORIZE,
26 UM_UPDATEFONT,
27 UM_GETDESIREDSIZE, // wp=parent wid,lp=parent hei, return size
28 UM_MENUEVENT, //模拟菜单控件事件,wparam:0, lparam:EventArg *
29 UM_RUN_TASKS, //执行异步任务
30 SPYMSG_BASE = UM_SOUI_BEGIN + 50, //和老版本保持一致(10000+1000)
31 SPYMSG_SETSPY = SPYMSG_BASE, //设置SPY消息接收窗口句柄
32 SPYMSG_SWNDENUM, //枚举窗口列表,wparam:SWND,lparam:SWindow::GetWindow
33 SPYMSG_SWNDINFO, //获取窗口属性,wparam:swnd
34 SPYMSG_HITTEST, // lparam:pos
35 UM_SOUI_END,
36};
37
38typedef BOOL (*FunSwndProc)(IWindow *pSwnd, UINT uMsg, WPARAM wp, LPARAM lp, LRESULT *pbHandled);
39
40#undef INTERFACE
41#define INTERFACE IWindow
42DECLARE_INTERFACE_(IWindow, IObject)
43{
44 DEF_OBJ_BASE(IWindow, Window)
45#include <interface/SobjectApi.h>
46
47 //////////////////////////////////////////////////////////////////////////
48
49 /**
50 * @brief 查询控件接口
51 * @param id REFGUID--控件接口ID
52 * @param [out] ppRet IObjRef * *--控件接口
53 * @return S_OK--成功
54 */
55 STDMETHOD_(HRESULT, QueryInterface)(THIS_ REFGUID id, IObjRef * *ppRet) PURE;
56
57 /**
58 * @brief 获取控件容器接口
59 * @return ISwndContainer *--控件容器接口
60 */
61 STDMETHOD_(ISwndContainer *, GetContainer)(THIS) PURE;
62
63 /**
64 * @brief 设置控件容器接口
65 * @param pContainer ISwndContainer *--控件容器接口
66 * @return
67 * @remark 内部调用
68 */
69 STDMETHOD_(void, SetContainer)(THIS_ ISwndContainer * pContainer) PURE;
70
71 /**
72 * @brief 获取SOUI容器句柄
73 * @return SWND--SOUI容器句柄
74 */
75 STDMETHOD_(SWND, GetSwnd)(CTHIS) SCONST PURE;
76
77 /**
78 * @brief 获取布局对象
79 * @return ILayout *--布局对象
80 */
81 STDMETHOD_(ILayout *, GetLayout)(THIS) PURE;
82
83 /**
84 * @brief 获取布局参数对象
85 * @return ILayoutParam *--布局参数对象
86 */
87 STDMETHOD_(ILayoutParam *, GetLayoutParam)(CTHIS) SCONST PURE;
88
89 /**
90 * @brief 设置布局参数对象
91 * @param pLayoutParam ILayoutParam *--布局参数对象
92 * @return TRUE--成功,FALSE--失败
93 * @remark 只有布局参数对象和窗口的布局类型匹配才会设置成功
94 */
95 STDMETHOD_(BOOL, SetLayoutParam)(THIS_ ILayoutParam * pLayoutParam) PURE;
96
97 /**
98 * @brief 获取当前窗口参与自动布局标志
99 * @return TRUE--参与布局,FALSE--不参与布局,需要用户在代码中手动布局
100 */
101 STDMETHOD_(BOOL, IsFloat)(CTHIS) SCONST PURE;
102
103 /**
104 * @brief 获取隐藏占位标志
105 * @return TRUE--窗口隐藏的时候占有该布局位置,FALSE--隐藏时不占位
106 */
107 STDMETHOD_(BOOL, IsDisplay)(CTHIS) SCONST PURE;
108
109 /**
110 * @brief 获取窗口是否处理鼠标消息
111 * @return TRUE--鼠标消息透传给父窗口
112 */
113 STDMETHOD_(BOOL, IsMsgTransparent)(CTHIS) SCONST PURE;
114
115 /**
116 * @brief 获取窗口是否自动剪裁客户区
117 * @return TRUE--自动剪裁客户区
118 * @remark 剪裁客户区可以限制窗口及它的子窗口绘制不超过当前窗口客户区,但是要增加一次剪裁操作
119 */
120 STDMETHOD_(BOOL, IsClipClient)(CTHIS) SCONST PURE;
121
122 /**
123 * @brief 设置tooltip
124 * @param pszText LPCTSTR--tooltip字符串
125 * @return
126 * @remark 支持多语言
127 */
128 STDMETHOD_(void, SetToolTipText)(THIS_ LPCTSTR pszText) PURE;
129
130 /**
131 * @brief 设置tooltip
132 * @param pszText LPCSTR--tooltip字符串(utf8)
133 * @return
134 * @remark 支持多语言
135 */
136 STDMETHOD_(void, SetToolTipTextU8)(THIS_ LPCSTR pszText) PURE;
137
138 /**
139 * @brief 获取窗口的check状态标志
140 * @return TRUE--checked
141 */
142 STDMETHOD_(BOOL, IsChecked)(CTHIS) SCONST PURE;
143
144 /**
145 * @brief 设置窗口check状态
146 * @param bCheck BOOL--check状态
147 * @return
148 */
149 STDMETHOD_(void, SetCheck)(THIS_ BOOL bCheck) PURE;
150
151 /**
152 * @brief 获取窗口的禁用状态
153 * @return TRUE--窗口禁用
154 */
155 STDMETHOD_(BOOL, IsDisabled)(CTHIS_ BOOL bCheckParent) SCONST PURE;
156
157 /**
158 * @brief 设置窗口启用状态
159 * @param bEnable BOOL--启用窗口
160 * @param bUpdate BOOL--同时刷新窗口标志
161 * @return
162 */
163 STDMETHOD_(void, EnableWindow)(THIS_ BOOL bEnable, BOOL bUpdate) PURE;
164
165 /**
166 * @brief 获取窗口的可见标志
167 * @return TRUE--可见
168 */
169 STDMETHOD_(BOOL, IsVisible)(CTHIS_ BOOL bCheckParent) SCONST PURE;
170
171 /**
172 * @brief 设置窗口可见标志
173 * @param bVisible BOOL--可见性
174 * @param bUpdate BOOL--同时刷新窗口标志
175 * @return
176 */
177 STDMETHOD_(void, SetVisible)(THIS_ BOOL bVisible, BOOL bUpdate) PURE;
178
179 /**
180 * @brief 获取窗口的用户数据
181 * @return ULONG_PTR--用户数据
182 */
183 STDMETHOD_(ULONG_PTR, GetUserData)(CTHIS) SCONST PURE;
184
185 /**
186 * @brief 设置窗口用户数据
187 * @param uData ULONG_PTR--新用户数据
188 * @return ULONG_PTR--原用户数据
189 */
190 STDMETHOD_(ULONG_PTR, SetUserData)(THIS_ ULONG_PTR uData) PURE;
191
192 /**
193 * @brief 执行调色
194 * @param cr COLORREF--目标色调
195 * @return
196 */
197 STDMETHOD_(void, DoColorize)(THIS_ COLORREF cr) PURE;
198
199 /**
200 * @brief 获取当前调色的色调
201 * @return COLORREF--色调
202 */
203 STDMETHOD_(COLORREF, GetColorizeColor)(CTHIS) SCONST PURE;
204
205 /**
206 * @brief 发送一个消息
207 * @param uMsg UINT-消息类型
208 * @param wParam WPARAM--参数1
209 * @param lParam LPARAM--参数2
210 * @param [out] pbMsgHandled BOOL*--消息被处理标志
211 * @return
212 */
213 STDMETHOD_(LRESULT, SSendMessage)
214 (THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL * pbMsgHandled) PURE;
215
216 /**
217 * @brief 分发一个消息到当前窗口及它所有子窗口
218 * @param uMsg UINT-消息类型
219 * @param wParam WPARAM--参数1
220 * @param lParam LPARAM--参数2
221 * @return
222 */
223 STDMETHOD_(void, SDispatchMessage)(THIS_ UINT uMsg, WPARAM wParam DEF_VAL(0), LPARAM lParam DEF_VAL(0)) PURE;
224
225 /**
226 * @brief 获取窗口是否允许设置为焦点
227 * @return TRUE--允许
228 */
229 STDMETHOD_(BOOL, IsFocusable)(CTHIS) SCONST PURE;
230
231 /**
232 * @brief 判断是否为焦点窗口
233 * @return TRUE--焦点窗口
234 */
235 STDMETHOD_(BOOL, IsFocused)(CTHIS) SCONST PURE;
236
237 /**
238 * @brief 将当前窗口设置为焦点窗口
239 * @return
240 */
241 STDMETHOD_(void, SetFocus)(THIS) PURE;
242
243 /**
244 * @brief 取消焦点
245 * @return
246 */
247 STDMETHOD_(void, KillFocus)(THIS) PURE;
248
249 /**
250 * @brief 刷新当前窗口客户区
251 * @return
252 */
253 STDMETHOD_(void, Invalidate)(THIS) PURE;
254
255 /**
256 * @brief 刷新当前窗口指定位置
257 * @param lprect LPCRECT--窗口位置
258 * @return
259 * @remark 可以包含非客户区,但是不刷新窗口外位置
260 */
261 STDMETHOD_(void, InvalidateRect)(THIS_ LPCRECT lprect) PURE;
262
263 /**
264 * @brief 锁住刷新,中断刷新调用
265 * @return
266 */
267 STDMETHOD_(void, LockUpdate)(THIS) PURE;
268
269 /**
270 * @brief 解锁刷新,恢复刷新调用
271 * @return
272 */
273 STDMETHOD_(void, UnlockUpdate)(THIS) PURE;
274
275 /**
276 * @brief 获取刷新加锁状态
277 * @return TRUE--当前刷新为加锁状态
278 */
279 STDMETHOD_(BOOL, IsUpdateLocked)(CTHIS_ BOOL bCheckParent DEF_VAL(FALSE)) SCONST PURE;
280
281 /**
282 * @brief 请求立即更新窗口
283 * @param BOOL bForce, TRUE-强制刷新,FALSE-有invalid region才刷新
284 * @return
285 * @remark 通常要刷新一个窗口,应该使用Invalidate/InvalidateRect,这样系统中所有请求都会在
286 下一次刷新的时候被重新绘制。但是这可能会出现延时。为了能够立即重新绘制,可以调用Update
287 */
288 STDMETHOD_(void, Update)(THIS_ BOOL bForce DEF_VAL(FALSE)) PURE;
289
290 /**
291 * @brief 设置窗口显示区域
292 * @param pRgn IRegionS*--显示区域
293 * @param bRedraw BOOL--重新绘制
294 * @return
295 * @remark 区域的左上角坐标为(0,0),在显示过程中会根据窗口真实坐标调整位置
296 */
297 STDMETHOD_(void, SetWindowRgn)(THIS_ IRegionS * pRgn, BOOL bRedraw) PURE;
298
299 /**
300 * @brief 获取窗口显示区域
301 * @return IRegionS*--显示区域
302 */
303 STDMETHOD_(IRegionS *, GetWindowRgn)(CTHIS) SCONST PURE;
304
305 /**
306 * @brief 设置窗口显示区域
307 * @param pRgn IPathS*--显示区域
308 * @param bRedraw BOOL--重新绘制
309 * @return
310 * @remark 区域的左上角坐标为(0,0),在显示过程中会根据窗口真实坐标调整位置
311 */
312 STDMETHOD_(void, SetWindowPath)(THIS_ IPathS * pPath, BOOL bRedraw) PURE;
313
314 /**
315 * @brief 获取窗口显示区域
316 * @return IPathS*--显示区域
317 */
318 STDMETHOD_(IPathS *, GetWindowPath)(CTHIS) SCONST PURE;
319
320 /**
321 * Move2
322 * @brief 将窗口移动到指定位置
323 * @param int x -- left
324 * @param int y -- top
325 * @param int cx -- width
326 * @param int cy -- height
327 * @return void
328 *
329 * Describe
330 * @see Move(LPRECT prect)
331 */
332 STDMETHOD_(void, Move2)(THIS_ int x, int y, int cx DEF_VAL(-1), int cy DEF_VAL(-1)) PURE;
333
334 /**
335 * @brief 将窗口移动到指定位置
336 * @param prect LPCRECT--窗口坐标
337 * @return
338 * remark 容器在容器中的坐标
339 */
340 STDMETHOD_(void, Move)(THIS_ LPCRECT prect) PURE;
341
342 /**
343 * @brief 获取窗口的显示位置,包含窗口的非客户区
344 * @param [out] LPRECT--窗口显示位置
345 * @remark SOUI窗口位置左上角不是(0,0),而是宿主窗口中的坐标
346 */
347 STDMETHOD_(void, GetWindowRect)(CTHIS_ LPRECT prect) SCONST PURE;
348
349 /**
350 * @brief 获取窗口的显示位置,不包含窗口的非客户区
351 * @param [out] LPRECT--窗口客户区显示位置
352 * @remark SOUI窗口位置左上角不是(0,0),而是宿主窗口中的坐标
353 */
354 STDMETHOD_(void, GetClientRect)(CTHIS_ LPRECT prect) SCONST PURE;
355
356 /**
357 * @brief 获取窗口的经过父窗口剪裁后的显示位置
358 * @param [out] LPRECT--窗口客户区显示位置
359 * @remark 不计算子窗口及兄弟窗口的剪裁
360 */
361 STDMETHOD_(void, GetVisibleRect)(CTHIS_ LPRECT prect) SCONST PURE;
362 /**
363 * @brief 检测一个点是不是在窗口范围内
364 * @param pt POINT--被检查坐标
365 * @param bClientOnly BOOL--测试客户区标志
366 * @return TRUE--在窗口范围内
367 */
368 STDMETHOD_(BOOL, IsContainPoint)(CTHIS_ POINT pt, BOOL bClientOnly) SCONST PURE;
369
370 /**
371 * @brief 检查pt指向的窗口
372 * @param [in,out] pt POINT *--测试坐标
373 * @param bIncludeMsgTransparent BOOL--测试消息透传窗口标志
374 * @return SWND--包含指定坐标的最顶层窗口
375 */
376 STDMETHOD_(SWND, SwndFromPoint)(CTHIS_ POINT * pt, BOOL bIncludeMsgTransparent DEF_VAL(FALSE)) SCONST PURE;
377
378 /**
379 * @brief 设置容器定时器
380 * @param id char--定时器ID,范围从0-127
381 * @param uElapse UINT--定时器延时
382 * @return TRUE--成功
383 */
384 STDMETHOD_(BOOL, SetTimer)(THIS_ char id, UINT uElapse) PURE;
385
386 /**
387 * @brief 删除SetTimer创建的定时器
388 * @param id char--SetTimer创建的定时器ID
389 * @return
390 */
391 STDMETHOD_(BOOL, KillTimer)(THIS_ char id) PURE;
392
393 /**
394 * @brief 获取鼠标捕获
395 * @return SWND--鼠标捕获窗口句柄
396 */
397 STDMETHOD_(SWND, GetCapture)(CTHIS) SCONST PURE;
398
399 /**
400 * @brief 设置容器为鼠标捕获
401 * @return SWND--前鼠标捕获窗口句柄
402 */
403 STDMETHOD_(SWND, SetCapture)(THIS) PURE;
404
405 /**
406 * @brief 释放鼠标捕获
407 * @return TRUE--释放成功
408 */
409 STDMETHOD_(BOOL, ReleaseCapture)(THIS) PURE;
410
411 /**
412 * @brief 设置一个窗口动画
413 * @param animation IAnimation *--动画对象
414 * @return
415 */
416 STDMETHOD_(void, SetAnimation)(THIS_ IAnimation * animation) PURE;
417
418 /**
419 * @brief 立即启动一个动画对象
420 * @param animation IAnimation *--动画对象
421 * @return
422 * @remark 和setAnimation不同在于立即启动,而不是等待动画对象中的延时启动时间
423 */
424 STDMETHOD_(void, StartAnimation)(THIS_ IAnimation * animation) PURE;
425
426 /**
427 * @brief 获取当前正在运行的动画对象
428 * @return IAnimation *--动画对象
429 */
430 STDMETHOD_(IAnimation *, GetAnimation)(CTHIS) SCONST PURE;
431
432 /**
433 * @brief 清除动画
434 * @return
435 */
436 STDMETHOD_(void, ClearAnimation)(THIS) PURE;
437
438 /**
439 * @brief 设置窗口透明度
440 * @param byAlpha BYTE--透明度,[0,255]
441 * @return
442 */
443 STDMETHOD_(void, SetAlpha)(THIS_ BYTE byAlpha) PURE;
444
445 /**
446 * @brief 获取窗口透明度
447 * @return BYTE--窗口透明度
448 */
449 STDMETHOD_(BYTE, GetAlpha)(CTHIS) SCONST PURE;
450
451 /**
452 * @brief 设置窗口变换矩阵
453 * @param mtx const IMatrix *--变换矩阵
454 * @return
455 */
456 STDMETHOD_(void, SetMatrix)(THIS_ const IMatrix *mtx) PURE;
457
458 /**
459 * @brief 获取窗口变换矩阵
460 */
461 STDMETHOD_(void, GetMatrix)(CTHIS_ IMatrix * mtx) SCONST PURE;
462
463 /**
464 * @brief 获取dpi放大倍数
465 * @return int--dpi放大倍数,以100为基数
466 */
467 STDMETHOD_(int, GetScale)(CTHIS) SCONST PURE;
468
469 /**
470 * @brief 请求重新布局
471 * @return
472 */
473 STDMETHOD_(void, RequestRelayout)(THIS) PURE;
474
475 /**
476 * @brief 重新布局当前窗口的子窗口,只在窗口布局脏了才生效
477 * @return
478 */
479 STDMETHOD_(void, UpdateLayout)(THIS) PURE;
480
481 /**
482 * @brief 强制重新布局子窗口
483 * @return
484 */
485 STDMETHOD_(void, UpdateChildrenPosition)(THIS) PURE;
486
487 /**
488 * @brief 获取布局脏标志
489 * @return TRUE--布局脏
490 */
491 STDMETHOD_(BOOL, IsLayoutDirty)(CTHIS) SCONST PURE;
492
493 /**
494 * @brief 获取窗口响应键盘的标志位
495 * @return UINT--响应键盘的标志位
496 */
497 STDMETHOD_(UINT, OnGetDlgCode)(CTHIS) SCONST PURE;
498
499 /**
500 * @brief 获取根窗口
501 * @return IWindow *--根窗口对象
502 */
503 STDMETHOD_(IWindow *, GetIRoot)(CTHIS) SCONST PURE;
504
505 /**
506 * @brief 获取父窗口
507 * @return IWindow *--父窗口对象
508 */
509 STDMETHOD_(IWindow *, GetIParent)(CTHIS) SCONST PURE;
510
511 /**
512 * @brief 根据uCode获取与当前窗口在dom树上关联的窗口
513 * @param uCode UINT--关联类型
514 * @return IWindow *--当前窗口在dom树上关联的窗口
515 */
516 STDMETHOD_(IWindow *, GetIWindow)(CTHIS_ int uCode) SCONST PURE;
517
518 /**
519 * @brief 获取子窗口
520 * @param iChild int--子窗口序号,[0,childCount]
521 * @return IWindow *--子窗口
522 * @remark iChild==0返回self, 1返回第一个子窗口
523 */
524 STDMETHOD_(IWindow *, GetIChild)(CTHIS_ int iChild) SCONST PURE;
525
526 /**
527 * @brief 获取子窗口数量
528 * @return UINT--子窗口数量
529 */
530 STDMETHOD_(UINT, GetChildrenCount)(CTHIS) SCONST PURE;
531
532 /**
533 * @brief 判断一个窗口是不是当前窗口的子孙窗口
534 * @param pTest const IWindow *--测试窗口
535 * @return TRUE--是子孙窗口
536 */
537 STDMETHOD_(BOOL, IsDescendant)(CTHIS_ const IWindow *pTest) SCONST PURE;
538
539 /**
540 * @brief 设置窗口的Owner
541 * @param pOwner IWindow *--Owner窗口
542 * @return
543 */
544 STDMETHOD_(void, SetIOwner)(THIS_ IWindow * pOwner) PURE;
545
546 /**
547 * @brief 获取Owner窗口
548 * @return IWindow *--Owner窗口
549 */
550 STDMETHOD_(IWindow *, GetIOwner)(CTHIS) SCONST PURE;
551
552 /**
553 * @brief 将当前窗口移动到同级兄弟窗口的zorder最顶层
554 * @param
555 * @return
556 */
557 STDMETHOD_(void, BringWindowToTop)(THIS) PURE;
558
559 /**
560 * AdjustZOrder
561 * @brief 调整窗口Z序
562 * @param SWindow *pInsertAfter -- 插入在这个窗口之后
563 * @return bool, pInsertAfter与this非同级窗口返回失败
564 *
565 * Describe pInsertAfter可以为NULL,或是与this同一级的兄弟窗口
566 */
567 STDMETHOD_(BOOL, AdjustIZOrder)(THIS_ IWindow * pInsertAfter) PURE;
568
569 /**
570 * InsertChild
571 * @brief 在窗口树中插入一个子窗口
572 * @param SWindow * pNewChild -- 子窗口对象
573 * @param SWindow * pInsertAfter -- 插入位置
574 * @return void
575 *
576 * Describe 一般用于UI初始化的时候创建,插入的窗口不会自动进入布局流程
577 */
578 STDMETHOD_(void, InsertIChild)(THIS_ IWindow * pNewChild, IWindow * pInsertAfter) PURE;
579
580 /**
581 * RemoveChild
582 * @brief 从窗口树中移除一个子窗口对象
583 * @param SWindow * pChild -- 子窗口对象
584 * @return BOOL
585 *
586 * Describe 子窗口不会自动释放
587 */
588 STDMETHOD_(BOOL, RemoveIChild)(THIS_ IWindow * pChild) PURE;
589
590 /**
591 * CreateChildrenFromXml
592 * @brief 从XML创建子窗口
593 * @param LPCWSTR pszXml -- 合法的utf16编码XML字符串
594 * @return BOOL 是否创建成功
595 *
596 * Describe
597 */
598 STDMETHOD_(BOOL, CreateChildrenFromXml)(THIS_ LPCWSTR pszXml) PURE;
599
600 /**
601 * CreateChildrenFromResId
602 * @brief 从XML资源创建子窗口
603 * @param LPCTSTR pszResId -- XML资源ID
604 * @return BOOL 是否创建成功
605 *
606 * Describe
607 */
608 STDMETHOD_(BOOL, CreateChildrenFromResId)(THIS_ LPCTSTR pszResId) PURE;
609
610 /**
611 * @brief 根据ID查找子窗口
612 * @param nId int--子窗口ID
613 * @return IWindow*--匹配窗口
614 * @remark 采用广度优先算法搜索匹配子窗口
615 */
616 STDMETHOD_(IWindow *, FindIChildByID)(THIS_ int nId) PURE;
617
618 /**
619 * @brief 根据Name查找子窗口
620 * @param pszName LPCWSTR--子窗口Name
621 * @return IWindow*--匹配窗口
622 * @remark 采用广度优先算法搜索匹配子窗口
623 */
624 STDMETHOD_(IWindow *, FindIChildByName)(THIS_ LPCWSTR pszName) PURE;
625
626 /**
627 * @brief 根据Name查找子窗口
628 * @param pszName LPCSTR--子窗口Name
629 * @return IWindow*--匹配窗口
630 * @remark 采用广度优先算法搜索匹配子窗口
631 */
632 STDMETHOD_(IWindow *, FindIChildByNameA)(THIS_ LPCSTR pszName) PURE;
633
634 /**
635 * DestroyChild
636 * @brief 销毁一个子窗口
637 * @param SWindow * pChild -- 子窗口对象
638 * @return BOOL
639 *
640 * Describe 先调用RemoveChild,再调用pChild->Release来释放子窗口对象
641 */
642 STDMETHOD_(BOOL, DestroyIChild)(THIS_ IWindow * pChild) PURE;
643
644 /**
645 * @brief 销毁所有子窗口
646 * @return
647 */
648 STDMETHOD_(void, DestroyAllChildren)(THIS) PURE;
649
650 /**
651 * @brief 销毁窗口
652 * @return TRUE--成功
653 */
654 STDMETHOD_(BOOL, Destroy)(THIS) PURE;
655
656 /**
657 * @brief 获取指定窗口的下一个参与布局的窗口对象
658 * @param pCurChild const IWindow *--当前窗口
659 * @return IWindow *--下一个布局窗口
660 */
661 STDMETHOD_(IWindow *, GetNextLayoutIChild)(CTHIS_ const IWindow *pCurChild) SCONST PURE;
662
663 /**
664 * GetChildrenLayoutRect
665 * @brief 获得子窗口的布局空间
666 * @param LPRECT prc--布局位置
667 * @return void
668 *
669 * Describe 通常是客户区,但是tab,group这样的控件不一样
670 */
671 STDMETHOD_(void, GetChildrenLayoutRect)(CTHIS_ RECT * prc) SCONST PURE;
672
673 /**
674 * GetDesiredSize
675 * @brief 当没有指定窗口大小时,通过如皮肤计算窗口的期望大小
676 * @param int nParentWid -- 容器宽度,<0代表容器宽度依赖当前窗口宽度
677 * @param int nParentHei -- 容器高度,<0代表容器高度依赖当前窗口高度
678 * @return CSize
679 *
680 * Describe
681 */
682 STDMETHOD_(void, GetDesiredSize)(THIS_ SIZE * pSize, int nParentWid, int nParentHei) PURE;
683
684 /**
685 * @brief 获取窗口背景色
686 * @return COLORREF--窗口背景色
687 */
688 STDMETHOD_(COLORREF, GetBkgndColor)(CTHIS) SCONST PURE;
689
690 /**
691 * @brief 设计窗口显示文本
692 * @param lpszText LPCTSTR--窗口显示文本
693 * @return
694 * @remark 支持自动翻译
695 */
696 STDMETHOD_(void, SetWindowText)(THIS_ LPCTSTR lpszText) PURE;
697
698 /**
699 * @brief 设计窗口显示文本
700 * @param lpszText LPCSTR--窗口显示文本(utf8)
701 * @return
702 * @remark 支持自动翻译
703 */
704 STDMETHOD_(void, SetWindowTextU8)(THIS_ LPCSTR lpszText) PURE;
705
706 /**
707 * @brief 获取窗口显示文本
708 * @param pBuf TCHAR*--缓冲区
709 * @param nBufLen int--缓冲区长度
710 * @param bRawText BOOL--获取翻译前文本标志
711 * @return int--复制的文本长度,pBuf为NULL时返回总缓冲区长度
712 */
713 STDMETHOD_(int, GetWindowText)(THIS_ TCHAR * pBuf, int nBufLen, BOOL bRawText) PURE;
714
715 STDMETHOD_(int, GetWindowTextU8)(THIS_ IStringA * pStr, BOOL bRawText) PURE;
716
717 /**
718 * @brief 获取窗口状态
719 * @return DWORD -- 窗口状态
720 */
721 STDMETHOD_(DWORD, GetState)(CTHIS) SCONST PURE;
722
723 /**
724 * @brief 修改窗口状态
725 * @param dwStateAdd DWORD--增加状态位
726 * @param dwStateRemove DWORD--删除状态位
727 * @param bUpdate BOOL--刷新窗口
728 * @return DWORD--新状态
729 */
730 STDMETHOD_(DWORD, ModifyState)(THIS_ DWORD dwStateAdd, DWORD dwStateRemove, BOOL bUpdate DEF_VAL(FALSE)) PURE;
731
732 /**
733 * GetISelectedSiblingInGroup
734 * @brief 获得在一个group中选中状态的窗口
735 * @return SWindow *
736 *
737 * Describe 不是group中的窗口时返回NULL
738 */
739 STDMETHOD_(IWindow *, GetISelectedSiblingInGroup)(THIS) PURE;
740
741 /**
742 * GetSelectedChildInGroup
743 * @brief 获取有选择状态的子窗口
744 * @return IWindow * -- 选中状态窗口
745 * Describe
746 */
747 STDMETHOD_(IWindow *, GetISelectedChildInGroup)(THIS) PURE;
748
749 /**
750 * @brief 同类型兄弟窗口自动成组标志
751 * @return TRUE--自动成组
752 * @remark 自动成组的窗口在用户按钮方向键时,组内窗口循环顺序获得焦点
753 */
754 STDMETHOD_(BOOL, IsSiblingsAutoGroupped)(CTHIS) SCONST PURE;
755
756 // caret相关方法
757
758 /**
759 * @brief 创建光标
760 * @param pBmp 创建光标的位图,可为null
761 * @param nWid int--光标宽度
762 * @param nHeight int--光标高度
763 * @return TRUE--成功
764 */
765 STDMETHOD_(BOOL, CreateCaret)(THIS_ HBITMAP pBmp, int nWid, int nHeight) PURE;
766
767 /**
768 * @brief 控制光标显示/隐藏
769 * @param bShow BOOL--显示标志
770 * @return
771 */
772 STDMETHOD_(void, ShowCaret)(THIS_ BOOL bShow) PURE;
773
774 /**
775 * @brief 设置光标显示位置
776 * @param x int-X
777 * @param y int-Y
778 * @return
779 */
780 STDMETHOD_(void, SetCaretPos)(THIS_ int x, int y) PURE;
781
782 /**
783 * @brief 设置当前控件是否允许发出事件
784 * @param bMute BOOL-允许发出事件标志
785 * @return
786 */
787 STDMETHOD_(void, SetEventMute)(THIS_ BOOL bMute) PURE;
788
789 /**
790 * @brief 订阅窗口事件
791 * @param evtId DWORD--事件ID
792 * @param pSlot const IEvtSlot *--事件处理对象
793 * @return TRUE--成功
794 */
795 STDMETHOD_(BOOL, SubscribeEvent)(THIS_ DWORD evtId, const IEvtSlot *pSlot) PURE;
796
797 /**
798 * @brief 取消窗口事件订阅
799 * @param evtId DWORD--事件ID
800 * @param pSlot const IEvtSlot *--事件处理对象
801 * @return TRUE--成功
802 */
803 STDMETHOD_(BOOL, UnsubscribeEvent)(THIS_ DWORD evtId, const IEvtSlot *pSlot) PURE;
804
805 /**
806 * @brief 增加窗口事件
807 * @param evtId DWORD--事件ID
808 * @param LPCWSTR pszEventHandlerName--字符串标识的事件处理(脚本使用)
809 * @return TRUE--成功
810 */
811 STDMETHOD_(BOOL, AddEvent)(THIS_ DWORD dwEventID, LPCWSTR pszEventHandlerName) PURE;
812
813 /**
814 * @brief 删除窗口事件
815 * @param evtId DWORD--事件ID
816 * @return TRUE--成功
817 */
818 STDMETHOD_(BOOL, RemoveEvent)(THIS_ DWORD dwEventID) PURE;
819 /**
820 * @brief 发射一个事件到应用层
821 * @param evt IEvtArgs *--事件对象
822 * @return TRUE--成功
823 */
824 STDMETHOD_(BOOL, FireEvent)(THIS_ IEvtArgs * evt) PURE;
825
826 /**
827 * FireCommand
828 * @brief 激活窗口的EVT_CMD事件
829 * @return BOOL-- true:EVT_CMD事件被处理
830 *
831 * Describe
832 */
833 STDMETHOD_(BOOL, FireCommand)(THIS) PURE;
834
835 /**
836 * FireCtxMenu
837 * @brief 激活快捷菜单事件
838 * @param CPoint pt -- 鼠标点击位置
839 * @return BOOL -- true:外部处理了快捷菜单事件
840 *
841 * Describe
842 */
843 STDMETHOD_(BOOL, FireCtxMenu)(THIS_ POINT pt) PURE;
844
845 /**
846 * SwndProc
847 * @brief 默认的消息处理函数
848 * @param UINT uMsg -- 消息类型
849 * @param WPARAM wParam -- 参数1
850 * @param LPARAM lParam -- 参数2
851 * @param LRESULT & lResult -- 消息返回值
852 * @return BOOL 是否被处理
853 *
854 * Describe 在消息映射表中没有处理的消息进入该函数处理
855 */
856 STDMETHOD_(BOOL, SwndProc)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT * lResult) PURE;
857
858 /**
859 * SetSwndProc
860 * @brief 设置消息处理函数
861 * @param FunSwndProc swndProc -- 消息处理函数
862 * @return void
863 *
864 * Describe
865 */
866 STDMETHOD_(void, SetSwndProc)(THIS_ FunSwndProc swndProc) PURE;
867
868 /**
869 * GetHostHwnd
870 * @brief 获取Host Hwnd
871 * @return HWND -- host hwnd
872 *
873 * Describe
874 */
875 STDMETHOD_(HWND, GetHostHwnd)(THIS) PURE;
876
877 /**
878 * GetTimelineHandlersMgr
879 * @brief 获取ITimelineHandlersMgr
880 * @return ITimelineHandlersMgr* -- 时间线管理器
881 *
882 * Describe
883 */
884 STDMETHOD_(ITimelineHandlersMgr *, GetTimelineHandlersMgr)(THIS) PURE;
885
886 /**
887 * IsVideoCanvas
888 * @brief 查询窗口是否为视频窗口
889 * @return BOOL -- TRUE:是视频窗口
890 *
891 * Describe
892 */
893 STDMETHOD_(BOOL, IsVideoCanvas)(CTHIS) SCONST PURE;
894
895 STDMETHOD_(BOOL, RegisterDragDrop)(THIS_ IDropTarget * pDragTarget) PURE;
896 STDMETHOD_(BOOL, UnregisterDragDrop)(THIS) PURE;
897};
898
899SNSEND
900#endif // __SWINDOW_I__H__
Interface for reference counting.
Definition obj-ref-i.h:19
Region object interface.
Definition SRender-i.h:792
SOUI Window Container Interface.