Windows桌面应用程序设计指南(控件篇18-文本框)

Windows桌面应用程序设计指南(控件篇18-文本框),第1张

使用文本框,用户可以展示、输入或编辑文字和数字。

思考以下问题:

虽然文本框具有非常灵活这一优点,但它们的缺点是具有最小值的约束。可编辑文本框的限制有:

除了长度限制和可选的旋转控制外,文本框没搜腊有任何视觉线索来提示其有效值或格式。这意味着必须要依靠标签将这些信息传递给用户。如果用户输入的文本无效,则必须使用错误提示告知用户错误原因。

一般来说, 应该尽可能多地使用限制性控件。 文本框这类的非限制性控件是最后的选择。即便如埋铅此,在考虑限制性时,也要考虑全球不同地区用户的需求。例如,适用于美国邮政编码的限制性控件并不能全球化使用,而非限制性文本框则可以适用于任何邮政编码格式。

文本框是一个有多种使用方式的灵活控件:

数据输入框 :一个用来输入或编辑短字符串的单行、非限制性文本框。

带辅助控件的输入框 :用于输入或编辑字符串的单行非限制性文本框,附带一个帮助用户选择有效值的命令按钮。

文本输入框 :用来编辑或输入长字符串的非限制性多行文本框。

数字输入框 :一种只能键入或编辑数字的单行文本框,可以附带一对方便鼠标 *** 作键入的弯漏好旋转控件。

数据输出 :不带边框的单行只读文本框,用来展示短的字符串。与静态文本不同,当数据比控件宽时,使用文本框显示的数据可以滚动、选中和复制。

文字输出 :用来展示大段只读文字的多行文本框。

因为文本框通常不会限制为仅接受有效值,所以需要对用户的输入进行确认,并且对可能出现的错误进行处理。在以下几种情形下验证输入问题:

更多详细规则,请参见 错误信息 和 气球状提示 相关章节。

输入提示是作为默认值放置在文本框中的一段标签文字或者简短提示。和其他静态文本不同,输入提示会在用户键入内容或者获取输入焦点的瞬间消失。

使用输入提示的场景有:

1.屏幕空间很有限,使用标签或说明文字不合适,如在工具栏上。

2.提示符主要用于简洁地表明文本框的用途。它不能是用户在使用文本框时需要查看的关键信息。

不要使用输入提示指示用户输入特定文字或点击按钮。例如,输入提示不能是“请输入文件名”或者“点击发送”。

使用输入提示时需要注意:

文本框的长度是预期输入文本长度的视觉线索。当设计文本框大小时:

当提到文本框时:

示例: 在 密码 框中键入密码,然后单击 确定

串口读写 *** 作

---- 主要运用ReadFile()卜弊蠢与WriteFile()API函数,若为异步通信方式,两函数中最后一个参数为指向OVERLAPPED结构的非空指针,在读写函数返回卜乎值为FALSE的情况下,调用GetLastError()函数,返回值为ERROR_IO_PENDING,表型陪明I/O *** 作悬挂,即 *** 作转入后台继续执行。此时,可以用WaitForSingleObject()来等待结束信号并设置最长等待时间,举例如下:

BOOL bReadStatus

bReadStatus = ReadFile( m_hIDComDev, buffer,

dwBytesRead, &dwBytesRead, &m_OverlappedRead )

if(!bReadStatus)

{

if(GetLastError()==ERROR_IO_PENDING)

{

WaitForSingleObject(m_OverlappedRead.hEvent,1000)

return ((int)dwBytesRead)

}

return(0)

}

return ((int)dwBytesRead)

#include <windows.h>//windows程序设计必须罩橘要包物裤团含的头文件

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) //回调函数的声明,将在wndclass.lpfnWndProc = WndProc中用到

//主函数即入口函数

int WINAPI WinMain (HINSTANCE hInstance, //实例句柄

HINSTANCE hPrevInstance,//上一个实例句柄

PSTR szCmdLine, //指向一个0结尾的字符串

int iCmdShow) //窗口开始的大小

{

static TCHAR szAppName[] = TEXT ("HelloWin") //将"HelloWin"赋给szAppName[]

HWND hwnd //定义一个窗口句柄,用来标识窗口

MSG msg //定义一个消息结构体,该结构体包含消息的几个数据

WNDCLASS wndclass //定义一个窗口类,该窗口类也是个结构体,下面的语句是修改结构体数据

wndclass.style = CS_HREDRAW | CS_VREDRAW //窗口绘制模式为水平重绘和垂直重绘

wndclass.lpfnWndProc = WndProc //回调函数为一开始申明的函数

wndclass.cbClsExtra = 0 //类的附加内存(额外的),不需要就设为0

wndclass.cbWndExtra = 0 //窗口的附加内存,同上

wndclass.hInstance = hInstance // 当前实例为系统纯返传递过来的实例,只能是这样,其它系统帮你做好了

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) //加载ICON图标,NULL加载系统的图标,第二个参数使系统里面图标的一个标识

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) //同上,不过是加载光标

wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) // 设置窗口背景为白色

wndclass.lpszMenuName = NULL //因为没有菜单,所以设为空

wndclass.lpszClassName= szAppName //你为你设计的这个窗口类取个名字,在hwnd = CreateWindow(中用到

if (!RegisterClass (&wndclass)) //注册你刚刚设计好的窗口

{

//注册不成功,d出消息框,显示引号里文字

MessageBox ( NULL, //通常是窗口句柄

TEXT ("This program requires Windows NT!"), //消息框显示的文字

szAppName, //题列上的字符串

MB_ICONERROR) //消息框的按钮

return 0

}

//创建窗口

hwnd = CreateWindow( szAppName, // window class name 窗口类的名字

TEXT ("The Hello Program"), // window caption 窗口的标题

WS_OVERLAPPEDWINDOW, // window style 窗口的风格

CW_USEDEFAULT,// initial x position 默认的窗口左上角的X、Y点

CW_USEDEFAULT,// initial y position

CW_USEDEFAULT,// initial x size 默认窗口显示的宽和高

CW_USEDEFAULT,// initial y size

NULL, // parent window handle 没有父窗口

NULL, // window menu handle 没有菜单、菜单句柄为空

hInstance, // program instance handle 程序当前实例,由系统传递

NULL) // creation parameters

ShowWindow (hwnd, iCmdShow) //显示窗口

UpdateWindow (hwnd) //更新窗口

while (GetMessage (&msg, NULL, 0, 0)) //消息循环,获取消息

{

TranslateMessage (&msg) //翻译消息,

DispatchMessage (&msg) // 分发消息

}

return msg.wParam //返回消息里的一个参数,只有退出程序时该值才为0

}

//回调函数的定义

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

HDC hdc //定义设备上下文句柄

PAINTSTRUCT ps //一个结构体

RECT rect //定义一个矩形

switch (message)

{

case WM_CREATE: //窗口刚刚创建好时发送的消息

//PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) //播放声音

return 0 //返回

case WM_PAINT: //窗口重画时的消息

hdc = BeginPaint (hwnd, &ps) //得到设备上下文句柄

GetClientRect (hwnd, &rect) //得到当前客户区矩形

DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,

DT_SINGLELINE | DT_CENTER | DT_VCENTER) //输出引号里文字,后面参数定义它输出的方式

EndPaint (hwnd, &ps) //释放设备上下文句柄

return 0

case WM_DESTROY: //窗口销毁时的消息

PostQuitMessage (0) //退出程序

return 0

}

return DefWindowProc (hwnd, message, wParam, lParam) //对没有定义处理方法的消息,系统默认处理

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12544826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存