- 博客(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
377
原创 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
240
原创 CreatePointFont使用方法
CreatePointFont 这个函数提供了一种简单的方法来创建指定字体类型和字体大小 。 函数原型: BOOL CreatePointFont( int nPointSize, LPCTSTR lpszFaceName, CDC* pDC = NULL ); nPointSize参数是磅的十倍,但是磅如何和像素点进行转化呢? 二者的关系为: 像素点数 = 96磅数/72 也就是说 磅数 = 像素点数72/96 ...
2021-04-12 23:01:39
2293
原创 彻底解决MFC画面闪烁问题
闪烁的原因 画面闪烁的原因是一方面画面更新的太快,另一方面,采用了Invalidate(),即先擦除全部图画,再进行绘画,两者结合,导致画面闪烁,具体原理是绘画的图像和背景相差较大,即面积较大,颜色相差较大且每帧图像变化不明显,再加上频繁重绘,界面反复的在背景和图画间切换,最后的结果就就是闪烁严重。 探索解决办法 网上很多文章提出了双缓冲绘图法,这种办法虽然能够一定的缓解闪烁,但是还是没有从根本上解决上述问题,绘图过快的时候还是可能出现闪烁现象的,如果我们采用不擦除刷新,那么虽然每帧的图像差距不大了,不再闪
2021-03-08 17:23:09
7024
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
122
原创 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
227
原创 STS 抽点/回退和初始条件保存/载入的原理
抽点的核心函数在 void CSupportSystemView::OnFileSaveGetdata() 其中的前半部分主要是说如何进行文件命名和删除多余抽点文件 后半部分的核心保存函数为: GetDocument()->GetShareMemoryData(); GetDocument()->OnFileSaverealdata(FileName,TRUE); 前者主要是通过遍历共享内存将内存中的变量传回模块,后者是通过直接对模块链表进行串行化,存入相关文件。这就是抽点的原理
2021-01-19 10:20:24
209
原创 STS和就地的启动过程,一机多模的原理
1.先配置STS和就地的JdSendAndReceive里面的IP地址 2.然后打开STS,加载算法,登录,加载模型,开始运行 3.然后通过STS主菜单启动“就地通信”,待托盘上的图标出现后右击,等待出现菜单,点击“重新发送IO”,再打开对应就地的shower, 刷新就地,这时就地界面的阀门由蓝色变为绿色,表明连接成功,这时可以点击阀门,修改状态,观察是否颜色会发生变化。 datacom主要是负责利用csv文件讲sts的点名和dcs的点名进行对应和通信,对于一机多模的程序来说,managecenter打开
2021-01-19 10:19:03
484
原创 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
223
原创 Datacom基本架构
Datacom基本架构显示界面二级目录三级目录数据结构 显示界面 左侧界面(CEmluatorDataBaseView)为STS工程内通讯点,右上方(CLn2000DataBaseView)为DCS通信点,右下方(CDataComView)为对应的树控件,中间(CDataRelationView)为两者通信的显示界面 二级目录 三级目录 数据结构 在CDataComApp::InitInstance()初始化函数里的OpenShareMem()函数里打开STS的共享内存,初始化了关于STS的指针和变量
2021-01-19 10:17:21
2513
原创 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
414
原创 一种替代寻找窗口指针的新方式,传递消息
首先,在子窗口发送消息 //下面一句是寻找接收窗口的句柄 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
117
原创 写报文实例
//写报文 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
832
原创 关于空指针规划共享内存的STS项目示例
写入部分: pObj->Point = DelRecord[del_num].Point;//2015.4.3 xp pPointer = (char *)PtrShareMemOutData + pObj->Point; //共享内存地址头+模块在共享内存中的位置 //模块名称(对于CString的操作方式) memcpy(pPointer,pObj->Module_Name,MAX_STRINGLENGTH); pPointer += MAX_STRINGLENGTH; //模块序号(
2020-07-15 11:02:41
83
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人