- 博客(16)
- 收藏
- 关注
原创 MFC如何自绘一个带文字进度条和OnPaint阻塞问题
自绘一个进度条需要重写OnPaint函数,说白了就是不让进度条的自绘起作用,在OnPaint里面自己绘制(如果要按这个说法来说其实也并不需要进度条,用编辑框自绘也可以)void CMyProgressCtrl::OnPaint(){ CPaintDC PaintDC(this); COLORREF m_colFore = RGB(0, 0, 255); COLORREF m_colBk = RGB(255, 255, 255); int nMin, nMax; GetRange(nMin,
2021-05-14 08:54:59
331
原创 MFC对话框上面贴对话框
首先子对话框的属性要设置一下Style设置成Child子对话框边框设置成无边框(如果需要的话),然后在父对话框类里面添加对应子对话框变量protected://一定是protect CRunDataViewDlg m_dlg;显示的时候: m_dlg.Create(IDD_DIALOG_RUNDATABROWSE, this); m_dlg.ShowWindow(SW_SHOW);...
2021-04-13 09:35:28
198
原创 CreatePointFont使用方法
CreatePointFont这个函数提供了一种简单的方法来创建指定字体类型和字体大小 。函数原型: BOOL CreatePointFont( int nPointSize, LPCTSTR lpszFaceName, CDC* pDC = NULL );nPointSize参数是磅的十倍,但是磅如何和像素点进行转化呢?二者的关系为:像素点数 = 96磅数/72也就是说磅数 = 像素点数72/96...
2021-04-12 23:01:39
2123
原创 彻底解决MFC画面闪烁问题
闪烁的原因画面闪烁的原因是一方面画面更新的太快,另一方面,采用了Invalidate(),即先擦除全部图画,再进行绘画,两者结合,导致画面闪烁,具体原理是绘画的图像和背景相差较大,即面积较大,颜色相差较大且每帧图像变化不明显,再加上频繁重绘,界面反复的在背景和图画间切换,最后的结果就就是闪烁严重。探索解决办法网上很多文章提出了双缓冲绘图法,这种办法虽然能够一定的缓解闪烁,但是还是没有从根本上解决上述问题,绘图过快的时候还是可能出现闪烁现象的,如果我们采用不擦除刷新,那么虽然每帧的图像差距不大了,不再闪
2021-03-08 17:23:09
6526
5
原创 应对多个客户端的服务器通信示例
主通信线程(监听线程)UINT CXXDlg::MyThreadCommunication( LPVOID pParam ){ WORD wWVersionRequested; WSADATA wsaData; int err; wWVersionRequested=MAKEWORD(1,1); err=WSAStartup(wWVersionRequested,&wsaData); if (err!=0) { AfxMessageBox("加载套接字库失败");
2021-02-18 16:15:34
101
原创 STS 的共享内存过程(待充分理解)
//初始化共享内存 CSupportSystemDoc* pSuptDoc; CSingleDocTemplate* pDocTmpl; pDocTmpl = ((CSupportSystemApp*)AfxGetApp())->pDocTemplate; POSITION posDoc= pDocTmpl->GetFirstDocPosition(); while(NULL!=posDoc) { pSuptDoc = (CSupportSystemDoc*) pDocTmpl-
2021-01-24 20:22:14
208
原创 STS 抽点/回退和初始条件保存/载入的原理
抽点的核心函数在void CSupportSystemView::OnFileSaveGetdata() 其中的前半部分主要是说如何进行文件命名和删除多余抽点文件后半部分的核心保存函数为: GetDocument()->GetShareMemoryData(); GetDocument()->OnFileSaverealdata(FileName,TRUE); 前者主要是通过遍历共享内存将内存中的变量传回模块,后者是通过直接对模块链表进行串行化,存入相关文件。这就是抽点的原理
2021-01-19 10:20:24
184
原创 STS和就地的启动过程,一机多模的原理
1.先配置STS和就地的JdSendAndReceive里面的IP地址2.然后打开STS,加载算法,登录,加载模型,开始运行3.然后通过STS主菜单启动“就地通信”,待托盘上的图标出现后右击,等待出现菜单,点击“重新发送IO”,再打开对应就地的shower,刷新就地,这时就地界面的阀门由蓝色变为绿色,表明连接成功,这时可以点击阀门,修改状态,观察是否颜色会发生变化。datacom主要是负责利用csv文件讲sts的点名和dcs的点名进行对应和通信,对于一机多模的程序来说,managecenter打开
2021-01-19 10:19:03
422
原创 STS内存读取过程
事前准备工作extern DWORD TaskNum; //仿真任务的ID号。extern CString szPVATMemFile ; //STS中AV静态信息所在共享内存名称。extern CString szPVDTMemFile ; //STS中AV点的值的指针所在共享内存名称。extern CString szPVAMemFile ; //STS中DV静态信息所在共享内存名称。extern CString szPVDMemFile ; //STS中DV点的值的指针所
2021-01-19 10:17:58
199
原创 Datacom基本架构
Datacom基本架构显示界面二级目录三级目录数据结构显示界面左侧界面(CEmluatorDataBaseView)为STS工程内通讯点,右上方(CLn2000DataBaseView)为DCS通信点,右下方(CDataComView)为对应的树控件,中间(CDataRelationView)为两者通信的显示界面二级目录三级目录数据结构在CDataComApp::InitInstance()初始化函数里的OpenShareMem()函数里打开STS的共享内存,初始化了关于STS的指针和变量
2021-01-19 10:17:21
2458
原创 UDP通信写包发包收包
void CMainFrame::SendData(int Cindex,CString* ChangedData)//点的个数和名字数组{ //使用UDP通信 使用CRC校验 发送的是对侧的点名 CSTSSendAndReceiverDoc* pDoc; pDoc = (CSTSSendAndReceiverDoc*)GetActiveDocument(); WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequest
2020-12-16 21:48:20
386
原创 一种替代寻找窗口指针的新方式,传递消息
首先,在子窗口发送消息 //下面一句是寻找接收窗口的句柄 HWND hWnd_CIFADSOC_1 = ::FindWindow(NULL, "要寻找的窗口名字"); if (hWnd_CIFADSOC_1 != NULL) { // 向目标窗口发送消息 //str1:想要发送的文本 COPYDATASTRUCT Data; Data.dwData = 0; Data.cbData = str1.GetLength(); //WM_TEST是自定义消息 Data.lpDa
2020-12-10 21:28:02
95
原创 写报文实例
//写报文 int tempIndex=0;//表示点的索引 while (1) { char SendChar[500]; char*pCurser,pNumberCurser; SendChar[0]=0x01; pCurser=SendChar+1; *((int*)(pCurser))=0; pNumberCurser=pCurser;//先保留点的个数的指针 pCurser+=sizeof(int); int tempPointNum=0;//包里面点的个数.
2020-12-07 20:04:43
800
原创 关于空指针规划共享内存的STS项目示例
写入部分:pObj->Point = DelRecord[del_num].Point;//2015.4.3 xppPointer = (char *)PtrShareMemOutData + pObj->Point;//共享内存地址头+模块在共享内存中的位置//模块名称(对于CString的操作方式)memcpy(pPointer,pObj->Module_Name,MAX_STRINGLENGTH);pPointer += MAX_STRINGLENGTH;//模块序号(
2020-07-15 11:02:41
71
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人