复选框是选择各种不同选项的最常用控件之一。用户可选中或取消选中复选框,并且可一次选中任意个框。使用键盘界面时,被聚焦的复选框的状态可使用<SPACE>键切换。禁用的框显示为灰色,如下图所示,其中描述了每种可能的复选框的外观:
开启皮肤色后显示效果如下:
41.2 官方WIDGET_CheckBox实例
官方的这个例子做的很好,充分的演示了复选框的各个状态。这个例子在模拟器中的位置:
41.2 源代码如下(主要看WIDGET_Checkbox中的代码):
#include <stddef.h>
#include "GUI.h"
#include "DIALOG.h"
#include "Main.h"
/*********************************************************************
*
* Static data
*
**********************************************************************
*/
//
// Dialog resource
//
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {(1)
{ FRAMEWIN_CreateIndirect, "Check box sample", 0, 10, 10, 300, 220, FRAMEWIN_CF_MOVEABLE},
{ TEXT_CreateIndirect, "Enabled:", 0, 5, 10, 120, 0 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK0, 5, 30, 120, 0 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK1, 5, 60, 120, 0 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK2, 5, 90, 120, 20 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK3, 5, 125, 120, 26 },
{ TEXT_CreateIndirect, "Disabled:", 0, 150, 10, 120, 0 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK4, 150, 30, 120, 0 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK5, 150, 60, 120, 0 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK6, 150, 90, 120, 26 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK7, 150, 125, 120, 26 },
{ BUTTON_CreateIndirect, "OK", GUI_ID_OK, 10, 170, 60, 20 },
{ BUTTON_CreateIndirect, "Cancel", GUI_ID_CANCEL, 225, 170, 60, 20 },
}
//
// Check box text
//
static const char * _apLabel[] = {(2)
"Default",
"3 States",
"Box XL",
"Box XXL"
}
/*********************************************************************
*
* Static code
*
**********************************************************************
*/
/*********************************************************************
*
* _cbCallback
*/
static void _cbCallback(WM_MESSAGE * pMsg) {
WM_HWIN hDlg
WM_HWIN hItem
int i
int NCode
int Id
hDlg = pMsg->hWin
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
WM_GetDialogItem(hDlg, GUI_ID_CHECK0)
for (i = 0i <8i++) {(3)
int Index = i % 4
hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK0 + i)// Get the handle of the desired checkbox
CHECKBOX_SetText(hItem, _apLabel[Index])// Set the check box text(4)
switch (Index) {
case 1:(5)
//
// Set the number of possible states to 3
//
CHECKBOX_SetNumStates(hItem, 3)(6)
//
// Use user defined bitmaps for the third state
//(7)
CHECKBOX_SetImage(hItem, &_abmBar[0], CHECKBOX_BI_INACTIV_3STATE)// Used if widget is disabled
CHECKBOX_SetImage(hItem, &_abmBar[1], CHECKBOX_BI_ACTIV_3STATE)// Used if widget is enabled
CHECKBOX_SetState(hItem, 2)(8)
break
case 2:(9)
CHECKBOX_SetState(hItem, 1)
//
// Use user defined bitmaps for the 'checked' state
//
CHECKBOX_SetImage(hItem, &_abmXL[0], CHECKBOX_BI_INACTIV_CHECKED)// Used if widget is disabled
CHECKBOX_SetImage(hItem, &_abmXL[1], CHECKBOX_BI_ACTIV_CHECKED)// Used if widget is enabled
CHECKBOX_SetFont(hItem, &GUI_FontComic18B_ASCII)
break
case 3:(10)
CHECKBOX_SetState(hItem, 1)
//
// Use user defined bitmaps for the 'checked' state
//
CHECKBOX_SetImage(hItem, &_abmXXL[0], CHECKBOX_BI_INACTIV_CHECKED)// Used if widget is disabled
CHECKBOX_SetImage(hItem, &_abmXXL[1], CHECKBOX_BI_ACTIV_CHECKED)// Used if widget is enabled
CHECKBOX_SetFont(hItem, &GUI_FontComic24B_ASCII)
break
}
//
// Disable all check boxes shown on the right side of the dialog
//
if (i >= 4) {(11)
WM_DisableWindow(hItem)
}
}
break
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc)// Id of widget
NCode = pMsg->Data.v// Notification code
switch (NCode) {
case WM_NOTIFICATION_RELEASED: // React only if released
if (Id == GUI_ID_OK) { // OK Button
GUI_EndDialog(hDlg, 0)
}
if (Id == GUI_ID_CANCEL) { // Cancel Button
GUI_EndDialog(hDlg, 1)
}
break
}
break
default:
WM_DefaultProc(pMsg)
}
}
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*********************************************************************
*
* MainTask
*/
void MainTask(void) {
#if GUI_SUPPORT_MEMDEV
WM_SetCreateFlags(WM_CF_MEMDEV)
#endif
GUI_Init()
WM_SetDesktopColor(GUI_BLACK)
while (1) {
GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0)
GUI_Delay(500)
}
}
41.1.1 复选框支持的通知代码
以下事件是复选框控件作为WM_NOTIFY_PARENT消息的一部分发送给其父窗口的:
消息 描述
WM_NOTIFICATION_CLICKED 复选框已被点击。
WM_NOTIFICATION_RELEASED 复选框已被释放。
WM_NOTIFICATION_MOVED_OUT 复选框已被点击,且指针已移出复选框并且没有释放。
WM_NOTIFICATION_VALUE_CHANGED 复选框的状态已改变。
41.1.2 按钮支持键盘反应
如果控件具有输入焦点,则它将对下列各键做出反应:
按键 反应
GUI_KEY_SPACE 切换小工具的选中状态
楼主,您好!参考说明4850程序输入说明,将程序符号输入.....公路全站仪中线放样程序注意:因程序的0(零)和O易混淆,所以字母O用较大的全角符号,零仍用标准字。程序输入时应连续输入,无空格。而且输入时文件名需和给出的一样,否则会出现调用文件错误。变量说明:<程序运算符定义>X输入摆站点的x坐标C输入第一个曲线角桩x坐标I输入中间曲线角桩的x坐标Y输入摆站点的y坐标D输入第一个曲线角桩y坐标J输入中间曲线角桩的y坐标E最后一个曲线角桩x坐标R中间曲线半径L中间曲线缓和曲线长F最后一个曲线角桩y坐标K第一个K为中间角桩桩号S中间角桩曲线总长,检验用K第二个K为要测设的桩号B测中桩时输入0,测边桩时输入宽度(左输负值,右输正值)文件:F1 文件名:1 L1L2
L3Defm 8
XYCDIJEFRLK:Fixm:Z[2]=0:Prog B
Z[5]=0.5L-L Xy 3/240R2:Z[3]=Z[5]+(R+L2/24R)Abs tan T┛2:Z=K-Ans:S=R Abs Tπ/180+L:S◢H=Z+Ans:G=RL:Prog 2文件:F2 文件名:2 L1
L2
L3
L4
L5
L6
L7
L8
L9
L10
L11
L12Lbl 0:Fixm:{K}
Lbl 6:{B}:Norm:K(-1) Xy Z[2]>(H-L)(-1) Xy Z[2]=>Goto 4⊿Frac Z[2]┛2=0=>Z[6]=Z:≠>Z[6]=H⊿A=90T/Abs T
B<0=>N=0:≠>N=1⊿B=Abs B
0=Abs(K-Z[6]:K(-1) Xy Z[2]>Z[6](-1) Xy Z[2]=>Goto 2⊿Q=Z[3]+0:Z[4]=B
B≠0=>Prog C⊿Prog D:P=0
Prog E:Goto 0
Lbl 2:0≥L=>Goto 3⊿
Q=Z[3]-0+0 Xy 5/40G2:Z[4]=0 Xy 3/6G-0 Xy 7/336G Xy 3:Prog D:P=B
B≠0=>Prog F⊿Prog E:Goto 0
Lbl 3:Q=Z[3]-Z[5]:Z[4]=R+L2/24R:Prog D
Z[8]=U+A(2(0-L)/πR-1+L/πR):B≠0=>Prog G:≠>P=R⊿Prog E:Goto 0
Lbl 4:M=C:0=D:C=E:D=F:E=M:F=0:Z[2]=Z[2]+1:Prog B:Goto 6文件:F3 文件名:0 L1Pol(M,0):W<0=>W=W+360文件:F4 文件名:B L1
L2M=E-I:0=F-J:Prog 0:T=W:M=I-C:0=J-D:Prog 0:U=W:T=T-W
T<-180=>T=T+360⊿T>180=>T=T-360文件:F5 文件名:C L1A=-90(-1) Xy (N+Z[2])文件:F6 文件名:D L1Z[7]=I-QcosU+Z[4]cos(U+A):Z[1]=J-QsinU+Z[4]sin(U+A)文件:F7 文件名:E L1
L2M=Z[7]+PcosZ[8]-X:0=Z[1]+PsinZ[8]-Y:Prog 0
W◢Fix 3:V◢Norm文件:F8 文件名:F L1Z[8]=U+A+A02/πG+90+A(-1) Xy (N+Z[2])文件:F9 文件名:G L1P=R+AB(-1) Xy (N+Z[2])/90任意点经纬仪放样程序文件:F1 文件名:YYDFY Y=999:I"RESET[Y┛N]"≠Y=>Goto 6⊿ ←
Defm 1:B"JD"A"PJ(DEG)":C=90H"Lh"÷πR:P=H2÷24R:Q=H┛2-H^3÷240R2:T=Q+(R+P)tan A┛2:L=2H+πR(A-2C)÷180:D=B-T:F=D+H:K=D+L┛2:S=D+L:N=S-H:"YH=":Pause 0:Z[1]"E"=(R+P)cos A┛2-R◢ ←
Lbl 6:Fixm:{Z}:H=S-N:D=F-H:B=D+T:Z"<<888=>(INSTAL)KM+m(r,σ;X,Y)"=888=>{CVWJUE}:C"(ZPJ)=1(YPJ)≠1"V"Xπ"W"Yπ(Z-,Y+)"J"Xh"U"Yh(Z-,Y+)"E"(D°M°S°)":Goto 6⊿←
Z≤D=>X=Z-D:Y=0:P=0:Goto 9⊿Z≥S=>X=T+cos A(Z-S+T):Y=sin A(Z-S+T):P=0:Goto 9⊿Z>F=>Z<N=>Goto 8⊿⊿Z≤F=>0=Z-D:≠>0=S-Z⊿ ←
H≠0=>X=0-0^5÷40R2H2:Y=0^3÷6RH-0^7÷336R^3H^3:P=3tan-1Y┛X:Z≥N=>G=Y÷tan A:I=Y÷sin A:0=X-G:X=T(1+cos A)-0cos A-I:Y=sin A(T-0)⊿Goto 9⊿←
Lbl 8:P=180(K-Z)÷πR:X=R√(2-2cos Abs P):I=√(X2+Z[1]2-2XZ[1]cos(90+Abs P÷2):0=sin-1(Xsin(90+Abs P÷2)÷I:G=A÷2+0:X=T-Isin G:Y=Icos G ←
Z≤K=>Goto 9⊿0≥A÷2=>G=0-A÷2:X=T+Isin G:Y=Icos G:Goto 9⊿X=T-Isin(A÷2-0):Y=Icos(A÷2-0)
Lbl 9:C=1=>Y=-Y⊿B=X:H=Y ←
Lbl 3:X"Xp"Y"Yp":X=V=>G=0:Y>W=>G=90⊿Y<W=>G=270⊿Goto 1⊿G=Abs tan-1(Y-W)┛(X-V) ←
X<V=>Y≤W=>G=180+G:≠>G=180-G⊿≠>Y<W=>G=360-G⊿⊿ ←
Lbl 1:J=V=>U>W=>I=270:≠>I=90⊿Goto 2⊿I=Abs tan-1(U-W)┛(J-V) ←
J>V=>U>W=>I=360-I⊿⊿J<V=>U>W=>I=180+I:≠>I=180-I⊿⊿ ←
Lbl 2:0√((X-V)2+(Y-W)2):"DIST(r)=":Pause 0:G=G+I+E:G≥720=>G=G-720⊿G≥360=>G=G-360⊿G"DEG(σ)="◢
Lbl 5:D=F+N-S:{MLGXY}:M"K=>(<<)A=>(X,Y)h=>(r,σ)B=>(FBZ)"=A=>Goto 4⊿M=h=>Goto 3⊿M=B=>L"JU ZHONG(m)(Z-)(Y+)":Goto 6⊿ ←
C=1≠>L=-L⊿Z≥N=>X=B-Lsin(A-P):C=1=>L=-L⊿Y=H+Lcos(A-P):Goto 3⊿Z≤F=>X=B-Lsin P:C=1=>L=-L⊿Y=H+Lcos P:Goto 3⊿X=B-Lsin(A÷2-P):C=1=>L=-L⊿Y=H+Lcos(A÷2-P):Goto 3⊿ ←
Lbl 4:D=L"DEG(σ)A{G}"-I-E:D<0=>D=360-D⊿Fixm:{Q}:X=V+Q"DIST(r)A{Q}"cosD:"X=":Pause 0:Y=W+Qsin D⊿ ←
Goto 5竖曲线标高计算程序变量说明:<程序运算符定义>A前一个变坡点桩号B前一个变坡点高程R中间变坡点半径C中间变坡点桩号D中间变坡点高程G前段坡度E后一个变坡点桩号F后一个变坡点高程H后段坡度L中间曲线的切线长I所求点的高程J切线至竖曲线的竖向距离K所求桩号文件1 程序名:SQX ABCD:Lbl 0:{ERF}:REF:G=(D-B)÷(C-A):H=(F-D)÷(E-C):L=R×Abs(G-H)÷2 ←
Lbl 1:{K}:K≤0=>Goto 2⊿K≤C+L=>L=-Abs L:Prog "SHU":M=D+(K-C)H+J:≠>M=D+(K-C)H:"AFTER QX"⊿L=Abs L:K≤C=>Prog "SHU":M=B+(K-A)G+J⊿K≤C-L=>M=B+(K-A)G⊿M=1000M:Prog "SSWR":I=M÷1000◢
K=K+20:Goto 1:Lbl 2:A=C:B=D:C=E:D=F:Goto 0文件2 程序名:SHU J=(K-C+L)2÷(2R):G-H>0=>J=-J⊿文件3 程序名:SSWR M-Int M<0.5=>M=Int M:≠>M=Int M+1⊿很高兴为您解答!
efm是设备独立性的一种格式,也就是说Eefm可以始终保持着图形的精度,而无论用打印机打印出何种分辨率(dot/inch)的硬拷贝。而在网路上,较小的efm格式可以节省带宽。用WINDOWS自带的图片和传真查看器能打开看到图片效果,或者用ACDSee转下格式,flash8也能输出*emf格式文件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)