MiniGUI编程-细节

 

 

 

 

 

 

MiniGUI编程--列表框

分享
分类: minigui 2009-11-04 20:40

 

列表框
LBS(ListBoxStyle)
以CTRL_LIST/"list"为类名调用CreateWindow
多选风格:LBS_MULTIPLESEL
高级风各:LBS_USEICON
LBS_CHECKBOX
LBS_AUTOCHECK
加上边框WS_BORDER
加垂直滚动条WS_VSCROLL
加水平滚动条WS_HSCROLL
允许通知消息:LBS_NOTIFY
排序LBS_SORT
常用风格组合:
LBS_NOTIFY|LBS_SORT|WS_VSCROLL|WS_BORDER
加入字符串LB_ADDSTRING
最上面索引值为0
SendMessage传递字符串时节lParam指向字符串
添加以未尾
SendMessage(hwndlist,LB_ADDSTRING,0,(LPARAM)string);
插入字符串LB_INSERTSTRING
SendMessage(hwndlist,LB_INSERTSTRING,index,(LPARAM)string);
如指定期LBS_CHECKBOX/LBS_USEICON风格添加时不能传字符串指针,而要使用LISTBOXITEMINFO结构
HICON hIcon1;
LISTBOXITEMINFO lbii;
hIcon1=LoadIconFromFile(HDC_SCREEN,"res/audio.ico",1);
lbii.hIcon=hIcon1;
lbii.cmFlag=CMFLAG_CHECKED;
lbii.string="ABCDEFG";
SendMessage(hwnd,LB_ADDSTRING,0,(LPARAM)&lbii);
cmFlag:CMFLAG_CHECKED,CMFLAG_BLANK,CMFLAG_PARTCHECKED
在列表框中显示位图
IMGFLAG_BITMAP
lbii.hIcon=(DWORD)GetSystemBitmap(SYSBMP_MAXIMIZE);
lbii.cmFlag=CMFLAG_CHECKED|IMGFLAG_BITMAP;
lbii.string="ABCDEF";
SendMessage(hwndlist,LB_ADDSTRING,0,(LPARAM)&lbii);
删除指定条目
发送LB_DELETESTRING消息
SendMessage(hwndlist,LB_DELETESTRING,index,0);
清空
SendMessage(hwndlist,LB_DELETESTRING,0,0);
获取条目个数
发送LB_GETCOUNT消息
count=SendMessage(hwndlist,LB_GETCOUNT,0,0);
获取指定条目字符串长度
发送LB_GETTEXTLEN
length=SendMessage(hwndlist,LB_GETTEXTLEN,index,0);
获取条目
length=SendMessage(hwndlist,LB_GETTEXTLEN,index,(LPARAM)buffer);
设置条目
LB_SETTEXT
SendMessage(hwndlist,LB_SETTEXT,index,buffer);
高级列形框要使用LB_GETITEMDATA/LB_SETITEMDATA
HICON hIocn1;
LISTBOXITEMINFO lbii;
hIcon1=LoadIconFromFile(HDC_SCREEN,"rest/audio.ico",1);
lbii.hIcon=hIcon1;
lbii.cmFlag=CMFLAG_CHECKED;
lbii.string="new item";
SendMessage(hwndlist,LB_SETITEMDATA,index,(LPARAM)&lbii);
获取当前选择项
LB_GETCURSEL
index=SendMessage(hwndlist,LB_GETCURSEL,0,0);
设置当前选择项
SendMessage(hwndlist,LB_SETCURSEL,index,0);
多选:
LB_GETSELCOUNT获得被选中的条目个数
LB_GETSELITEMS获得所有被选索引值
int i,sel_count;
int *sel_itmes;
sel_count=SendMessage(hwndlist,LB_GETSELCOUNT,0,0L);
if(sel_count==0)
return;
sel_items=alloca(sizeof(int)*sel_count);
SendMessage(hwndlist,LB_GETSELITEMS,sel_count,sel_items);
for(i=0;i<sel_count;i++)
...
查所字符串
模糊查找LB_FINDSTRING
精确查找LB_FINDSTRINGEXACT
index=SendMessage(hwndlist,LB_FINDSTRING,(LPARAM)string);
获取检查框状态
status=SendMessage(hwndlist,LB_GETCHECKMARK,index,0);
返回值:
CMFLAG_CHECKED选择状态
CMFLAG_PARTCHECKED部分选择状态
CMFLAG_BLANK未选择状态
设检查框状态
ret=SendMessage(hwndlist,LB_SETCHECKMARK,index,(LPARAM)status);
返回值:
LB_ERR失败
LB_OKAY成功
为每个条目附加一个32位数据,在需要时取出该值
LB_SETITEMADDDATA
LB_GETITEMADDDATA
设置条目所占高度
LB_SETITEMHEIGHT
返回条目所占高度
LB_GETITEMHEIGHT
通知码:
必须指定LBS_NOTIFY风格
LBN_ERRSPACE内存分配失败
LBN_SELCHANGE当前选择项发生变化
LBN_CLICKED单击
LBN_DBLCLK双击
LBN_SELCANCEL取消选择
LBN_SETFOCUS列表框获得焦点
LBN_KILLFOCUS列表框失去焦点
LBN_CLICKCHECKMARK单击条目检查框
LBN_ENTER在列表框中按下Enter键
只有指下LBS_NOTIFY时,列表框才会向父窗口发送通知消息
如果用SetNotificationCallback设定了通知回调函数
则控件不发送MSG_COMMAND通知消息,而会直接调用设定的通知回调函数

 

 

 

 

MiniGUI编程--编辑框

分享
2009-11-04 20:41

 

编辑框
ES(EditStyle)
单行CTRL_SLEDIT/"sledit"  SingleLineEdit
多行CTRL_MLEDIT/"textedit"  MultiLineEdit
通用风格
WS_CHILD|WS_VISIBLE|WS_BORDER
特有风格:
ES_UPPERCASE大写
ES_LOWERCASE小写
ES_PASSWORD密码
ES_READONLY只读
ES_BASELINE显示虚线
ES_AUTOWRAP自动换行
ES_LEFT左对齐
ES_NOHIDESEL失去焦点保持文本的选中状态
ES_AUTOSELECT得到焦点时自动先选中所有
ES_TITLE第一行显示标题
ES_TIP提示信息
ES_CENTER文本居中对齐
ES_RIGHT文本右对齐
多行文本框指定滚动条:
WS_HSCROLL
WS_VSCROLL
消息:
MSG_GETTEXTLENGTH获取文本长度
MSG_GETTEXT获取文本
MSG_SETTEXT设置文本
或用以下函数
GetWindowTextLength
GetWindowText
SetWindowText
取得插入符位置
EM_GETCARETPOS
int line_pos;
int char_pos;
SendMessage(hwndedit,EM_GETCARETPOS,(WPARAM)&line_pos,(LPARAM)&char_pos);
参数:
line_pos行索引值
char_pos该行中的字符位置
设置插入符位置
EM_SETCARETPOS
int line_pos;
int char_pos;
SendMessage(hwndedit,EM_SETCARETPOS,line_pos,char_pos);
获取当前选中文本
EM_GETSEL
char buffer[buf_len];
SendMessage(hwndedit,EM_GETSEL,buf_len,(LPARAM)buffer);
设置当前选中的文本
EM_SETSEL
int line_pos,char_pos;
SendMessage(hwndedit,EM_SETSEL,line_pos,char_pos);
lParam指定行索引值,wParam指定行内字符位置
获取当前选择点位置
EM_GETSELPOS
int line_pos,char_pos;
SendMessage(hwndedit,EM_GETSELPOS,(WPARAM)&line_pos,(LPARAM)&char_pos);
选择所有字符相当于Ctrl+A
EM_SELECTALL
SendMessage(hwndedit,EM_SELECTALL,0,0);
复制到剪贴板Ctrl+C
EM_COPYTOCB CopyToClipBoard
SendMessage(hwndedit,EM_COPYTOCB,0,0);
粘贴到编辑框Ctrl+V
EM_INSERTCBTEXT InsertClipBoardText
SendMessage(hwndedit,EM_INSERTCBTEXT,0,0);
剪切Ctrl+X
EM_CUTTOCB CutToClipBoard
SendMessage(hwndedit,EM_CUTTOCB,0,0);
获取行高
EM_GETLINEHEIGHT
int line_height;
line_height=SendMessage(hwndedit,EM_GETLINEHEIGHT,0,0);
设置行高
EM_SETLINEHEIGHT
int line_height;
SendMessage(hwndedit,EM_SETLINEHEIGHT,line_height,0);
获取行数
EM_GETLINECOUNT
int line_count;
line_count=SendMessage(hwndedit,EM_GETLINECOUNT,0,0);
设置文本上限
EM_LIMITTEXT
SendMessage(hwndedit,EM_LIMITTEXT,10,0L);
设置只读
EM_SETREADONLY wParam为TRUE
取消只读
EM_SETREADONLY wParam为FALSE
修改密码显示字符
EM_SETPASSWORDCHAR
SendMessage(hwndedit,EM_SETPASSWORDCHAR,'%',0L);
获得当前密码字符
EM_GETPASSWORDCHAR
设置提示文字
SLEDIT控件具有ES_TIP风格时
ES_SETTIPTEXT
获取提示文字
ES_GETTIPTEXT
int len;
char *tip_text;
SendMessage(hwndedit,ES_SETTIPTEXT,len,(LPARAM)tip_text);
lParam指定字符串,wParam指定长度

int len;
char tip_text[len+1];
SendMessage(hwndedit,EM_GETTIPTEXT,len,(LPARAM)tip_text);
lParam指定缓冲区,wParam指定长度
当TEXTEDIT具有ES_TITLE风格时
EM_SETTITLETEXT设置标题文字
EM_GETTITLETEXT获取标题文字
int len;
char *title_text;
SendMessage(hwndedit,EM_SETTITLETEXT,len,(LPARAM)title_text);
lParam指定字符串,wParam指定长度

int len;
char title_text[len+1];
SendMessage(hwnd,EM_GETTITLETEXT,len,(LPARAM)title_text)
lParam指定缓冲区,wParam指定长度
编辑框通知码
编辑框没有ES_NOTIFY风格
EN_SETFOCUS
EN_KILLFOCUS
EN_CHANGE
EN_ENTER
EN_MAXTEXT
EN_CLICKED
EN_DBLCLK

 

 

 

控件专用函数
GetNotificationCallback获取控件的通知消息的回调函数
SetNotificationCallback设置控件的通知消息的回调函数
NotifyParentEx发送控件通知消息

 

 

 

 

MiniGUI编程--静态框

分享
分类: minigui 2009-11-04 20:43

 

静态框
以CTRL_STATIC/"static"为类名调用CreateWindow即可创建
风格
普通
SS_SIMPLE
SS_LEFT
SS_CENTER
SS_RIGHT
SS_LEFTNOWORDWRAP
位图
SS_BITMAP
SS_ICON

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值