MFC学习笔记
发布日期:2021-07-29 11:00:13
浏览次数:3
分类:技术文章
本文共 4084 字,大约阅读时间需要 13 分钟。
- 通过theApp获得主窗口句柄
在任何文件中如何通过theApp获得主窗口的控件,并响应其消息函数
例:
extern CxxxApp theApp theApp.m_pMainWnd - >SendDlgItemMessage(IDC_INPUT_OK,WM_LBUTTONDOWN,NULL,NULL); theApp.m_pMainWnd - >SendDlgItemMessage(IDC_INPUT_OK,WM_LBUTTONUP,NULL,NULL);以上是对主窗口的IDC_INPUT_OK控件发送单击命令。
- MFC中RadioButton组回调函数使用
在面板中Ctrl+D设置RadioButton分组,将每组第一个Group属性设为True,设置一个变量关联每个组(控件变量选变量值),对变量赋值UpData(TRUE)传输到面板...
Group Radio Button 响应函数:给第一个添加响应后,将ON_BN_CLICKED(IDC_RADIO1,OnRadio)改为ON_CONTROL_RANGE(BN_CLICKED,IDC_RADIO1,IDC_RADIO10,OnRadio) 此处有10个Radio为一组
- CComBSTR和char*相互转换
char *IP; CComBSTR IoResource = "L102"; IP =_com_util : :ConvertBSTRToString(IoResource);IoResource=_com_util::ConvertStringToBSTR(IP);
- MessageBox使用
try{ ... } catch (_com_error & e) { : :MessageBox(NULL, e.Description(), e.ErrorMessage(), MB_ICONERROR); } MessageBox(L "生成会话工厂实例发生错误!",L "错误",MB_ICONERROR);
- 创建线程
HANDLE pt =CreateThread(NULL, 0,Thread_Proc,(LPVOID) &Lxi102channel[n], 0,NULL); CloseHandle(pt);
- 自定义延时函数
void MyDelay( int n) { int dwStart = 0; int dwEnd = 0; do { MSG msg; GetMessage( &msg,NULL, 0, 0); TranslateMessage( &msg); DispatchMessage( &msg); dwEnd =GetTickCount() -dwStart; } while(dwEnd <n); }
- 常用字符串操作函数
strcpy( char *_Dest, const char * _Source); strcpy_s( char *_Dest,size_t _SizeInBytes, const char * _Source); wcscpy_s(WCHAR *_Dest,size_t _SizeInWords, const WCHAR *_Source); swscanf_s(inputDate,L "%d:%d:%d", &hh, &mm, &ss); sscanf_s(rawDate, "%d/%d/%d %d:%d:%d", &year, &month, &day, &hour, &minute, &second); wsprintf(wstr1,L "正在进行通道%d等待源设置...",number); swprintf_s(inputDate,L "%d:%d:%d",hh,mm,ss); sprintf_s(scpi_send,SCPI_SEND_LENGTH, "MEASure:%s(@%d,@%d)\n",measureSwitchStr[measureSwitch],channel1,channel2);
- CDC画图
int m_left; int m_top ; int m_right; int m_bottom; CDC *pDC; CPen pPenRed; CPen pPenWhite; CRect drawrect; CWnd * pWnd; pWnd = GetDlgItem(IDC_DRAW); //IDC_DRAW为图形控件(也可以是STATIC控件?) pWnd - >GetClientRect( &drawrect); //获得画图矩形区 pDC = pWnd - >GetDC(); pWnd - >Invalidate(); pWnd - >UpdateWindow(); pDC - >Rectangle( &drawrect); m_left = drawrect.left + 25; m_top = drawrect.top + 5; m_right = drawrect.right - 10; m_bottom = drawrect.bottom - 25; // 红色画笔 pPenRed.CreatePen(PS_DASHDOTDOT, 1,RGB( 255, 0, 0)); //白色画笔 pPenWhite.CreatePen(PS_SOLID, 1,RGB( 255, 255, 255)); //画一条对角线 pDC - >FillSolidRect( &drawrect, RGB( 0, 0, 0)); //背景黑色 pDC - >SelectObject( &pPenRed); //使用红笔 pDC - >SetTextColor(RGB( 0, 255, 0)); //绿色字体 pDC - >MoveTo(m_left,m_bottom); //线条起点 pDC - >LineTo(m_right,m_top); //线条终点 pDC - >TextOut(m_left + 15,m_bottom + 3,L "Hello"); //指定坐标写字
- CDC画图移动窗口图形消失解决办法
重载窗口OnPaint()函数如:void TSER : :OnPaint() { CPaintDC dc( this); // device context for painting // TODO: Add your message handler code here // Do not call CDialog::OnPaint() for painting messages DrawBackGround(); DrawWave(); }
- VARIANT数据存储与读取
void getValue(VARIANT *getVal) { //返回数组格式为//时间 通道1至16数据 /[t0, y1_0 ~ y16_0, //t1, y1_1 ~ y16_1, //t2, y1_2 ~ y16_2, //t3, y1_3 ~ y16_3, //................] / 返回数据初始化,如果读取数据正常,则返回读取数据,否则返回下列数据 SAFEARRAY FAR * psa; SAFEARRAYBOUND rgsabound[ 1]; rgsabound[ 0].lLbound = 0; rgsabound[ 0].cElements = 20 * 17; long idx = 0; psa =SafeArrayCreate(VT_I4, 1,rgsabound); for ( unsigned int n =rgsabound[ 0].lLbound;n <rgsabound[ 0].cElements;n ++) { readData =((n % 17) == 0) ?(n * 10) :( 0); idx =( long)n; SafeArrayPutElement(psa, &idx, &readData); } V_VT(getVal) = VT_ARRAY | VT_I4; V_ARRAY(getVal) =psa; / } void FormateVariantToDatas() { unsigned int xdata[ 1024]; unsigned int ydata[ 16][ 1024]; VARIANT V_getValue; getValue( &V_getValue); long dim =SafeArrayGetDim(V_getValue.parray); long ubound; long lbound; SafeArrayGetUBound(V_getValue.parray,dim, &ubound); SafeArrayGetLBound(V_getValue.parray,dim, &lbound); long index = 0; unsigned int tempn = 0; unsigned int tempnmode = 0; long readData; for ( long index = 0;index < =ubound;index ++) { tempn =( unsigned int)index / 17; tempnmode =( unsigned int)(index % 17); SafeArrayGetElement(V_getValue.parray, &index, &readData); if (tempnmode == 0) { xdata[tempn] =readData; } else { ydata[tempnmode - 1][tempn] =readData; } } }
转载地址:https://blog.csdn.net/thq0201/article/details/7786613 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月15日 06时07分30秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Druid连接池实现自定义场景的多数据库的连接
2019-04-27
CentOs7命令行(静默)的方式安装oracle数据库
2019-04-27
基于VMware安装CentOs7的镜像
2019-04-27
PL/SQL数据库管理工具的使用
2019-04-27
史上最简单的spring-boot集成websocket的实现方式
2019-04-27
带你玩转属于自己的spring-boot-starter系列(一)
2019-04-27
带你玩转属于自己自己的spring-boot-starter系列(二)
2019-04-27
带你玩转属于自己的spring-boot-starter系列(三)
2019-04-27
基于SnowFlake算法如何让分库分表中不同的ID落在同一个库的算法的实现
2019-04-27
Linux文件管理参考
2019-04-27
FTP文件管理项目(本地云)项目日报(一)
2019-04-27
FTP文件管理项目(本地云)项目日报(二)
2019-04-27
FTP文件管理项目(本地云)项目日报(三)
2019-04-27
FTP文件管理项目(本地云)项目日报(四)
2019-04-27
【C++】勉强能看的线程池详解
2019-04-27