Windows常见窗口样式和控件风格
王佰营 徐丽红
转载地址:https://www.cnblogs.com/findumars/p/3520676.html
[……]
Windows常见窗口样式和控件风格
王佰营 徐丽红
转载地址:https://www.cnblogs.com/findumars/p/3520676.html
[……]
1 2 3 4 5 6 7 8 9 10 |
//QString 与 CString 转化测试 QString qstrSrc = "一段测试互转代码"; CString strTmp = qstrSrc.toStdWString().c_str(); qDebug() << "QString : " << qstrSrc; MessageBox(NULL, strTmp, TEXT("文件名称"), MB_OK); CString cstr = strTmp; QString qstr(QString::fromStdWString(cstr.GetString())); MessageBox(NULL, strTmp, TEXT("文件名称"), MB_OK); qDebug() << "QString : " << qstr; |
我都喜欢直接贴代码…尴尬。
[……]
这里只提供代码。
[……]
用的VS2013,目前在看VC++深入详解,写异步套接字编程的时候有一个自定义消息映射,会出问题。
[……]
我真是难…现在有一个类,类里面要使用多线程完成对机器的链接状态访问。
那么问题来了:
[……]
大致就是:应用进程退出了,但是没有让托盘菜单消失,于是必须鼠标放在那里才会消失。
[……]
MFC 托盘弹出控制菜单后,单击其他地方或按ESC键也都不能使托盘菜单消失(一直悬挂着怪让人难受的),必须选择托盘菜单里的控制选项才能关闭菜单(好比到一家餐厅不点菜不给走呀),这是个很严重的问题,因为如果你的菜单里面只有“关闭”按钮,那是程序的灾难了…
[……]
在用MFC做软件的时候可能经常会出现多国语言的情况。
这里做一个记录如何处理多国语言的情况。 VS2013环境。
[……]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
void FaceserverUser::DoFieldExchange( CFieldExchange* pFX ) { pFX->SetFieldType( CFieldExchange::outputColumn ); // RFX_Text() 和 RFX_Int() 这类宏依赖的是 // 成员变量的类型,而不是数据库字段的类型。 // ODBC 尝试自动将列值转换为所请求的类型 RFX_Long( pFX , _T( "[userId]" ) , m_userId ); RFX_Text( pFX , _T( "[userName]" ) , m_userName ); RFX_Long( pFX , _T( "[userType]" ) , m_userType ); RFX_Text( pFX , _T( "[cardNo]" ) , m_cardNo ); RFX_Long( pFX , _T( "[featureLen]" ) , m_featureLen ); RFX_Text( pFX , _T( "[base64FeatureData]" ) , m_base64FeatureData , 20000 , SQL_LONGVARCHAR ); RFX_Long( pFX , _T( "[photoLen]" ) , m_photoLen ); RFX_Text( pFX , _T( "[base64PhotoData]" ) , m_base64PhotoData , 20000 , SQL_LONGVARCHAR ); } |
以上是自动生成的代码修改过后的结果。
修改原因 :链接数据仓库传递数据的时候,RFX_TEXT默认只能传递255个数据,所以需要自己修改…
CRecordset 使用 Update() 函数的时候报错,可能就是因[……]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
void CTestFaceServerSdkDlg::OnEventCEnrollUserFaceserversdkctrl1( LPCTSTR strDevSn , //终端序列号 m_devSn long lOpCode , //操作标识 OP_SUCC=0 成功 OP_FAIL=1 失败 long lUserData , //用户传进来的自定义数据 long lExtendParam , //扩展参数 long lUserId , //用户编号 LPCTSTR strCardNo , //卡号 long lFeatureLen , //特征码原始长度 LPCTSTR strBase64FeatureData , //经过BASE64编码的特征数据 long lPhotoType , //照片类型保留 long lPhotoLen , //照片原始数据长度 LPCTSTR strBase64PhotoData //经过BASE64编码的照片数据 ) { // TODO: 在此处添加消息处理程序代码 if(lPhotoLen > 0) { MessageBox( _T( "人脸登记成功" ) ); int nBase64PhotoLen = wcslen( strBase64PhotoData ); if(nBase64PhotoLen > 1024) { char szBuffer[ BUF_LEN ] = { 0 }; char* pDst = szBuffer; CBase64 * cBase64 = new CBase64; int nDstLen = cBase64->DecodeBase64( (const char*)( CW2A( strBase64PhotoData ) ) , (unsigned char*)pDst , nBase64PhotoLen ); CString strSuffix; strSuffix.Format( _T( "%d" ) , lUserId ); CString strFileName; SYSTEMTIME sys; GetLocalTime( &sys ); strFileName.Format( _T( ".\\PHOTO_%s_%04d%02d%02d%02d%02d%02d%03d_%s.jpg" ) , _T( "GetUserInfo" ) , sys.wYear , sys.wMonth , sys.wDay , sys.wHour , sys.wMinute , sys.wSecond , sys.wMilliseconds , strSuffix ); CFile file; CFileException ex; if(file.Open( strFileName , CFile::modeWrite | CFile::shareExclusive | CFile::modeCreate , &ex )) { file.Write( szBuffer , nDstLen ); file.Flush(); file.Close(); } } } } |
先暂存一下…
从图片获取数据显示在界面上:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//文件读取方法: int cx , cy; CImage image; CRect rect; //根据路径载入图片 image.Load( strFileName ); //获取图片的宽 高度 cx = image.GetWidth(); cy = image.GetHeight(); //获取Picture Control控件的大小 GetDlgItem( IDC_STATIC_PIC )->GetWindowRect( &rect ); //将客户区选中到控件表示的矩形区域内 ScreenToClient( &rect ); //窗口移动到控件表示的区域 GetDlgItem( IDC_STATIC_PIC )->MoveWindow( rect.left , rect.top , cx , cy , TRUE ); CWnd *pWnd = NULL; pWnd = GetDlgItem( IDC_STATIC_PIC );//获取控件句柄 pWnd->GetClientRect( &rect );//获取句柄指向控件区域的大小 CDC *pDc = NULL; pDc = pWnd->GetDC();//获取picture的DC image.Draw( pDc->m_hDC , rect );//将图片绘制到picture表示的区域内 ReleaseDC( pDc ); |
Base64数据流直接显示到界面上:
[crayon-673ed2[……]
一 函数原型及参数
function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer;
hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面[……]
在类向导——消息——WM_CLOSE 里添加处理程序(如图所示)
然后,重写代码段即可。
可以按自己的需要,在退出前执行某些函数,比如:
弹出对话框确认等等