博文

SendMessage 进程间简单通信问题 vc++(2006-09-25 11:58:00)

摘要:SendMessage进程间简单通信问题 vc++ 本例以两个VC Dialog application 为例用SendMessage进行两进程间简单通信: 主要API:FindWindow(LPCTSTR lpClassName,    LPCTSTR lpWindowName  ) //通过进程名得到进程handle SendMessage(UINT message, WPARAM wParam = 0, LPARAM lParam = 0) //The result of the message processing; its value depends on the message sent. 主程序 Server :其他均为默认. MFC 建立一Dialog 应用程序,工程名字:Server 添加一Button控件command,并与之对应的函数OnCommand 在ServerDlg.h里添加自己的消息:#define WM_COMM WM_USER+10 函数 OnCommand 添加代码: {  CString str="Client"; CWnd *pWnd=CWnd::FindWindow(NULL,str); if(pWnd)  pWnd->SendMessage(WM_COMM,0,0);//通过SendMessage的后两个参数 //WPARAM wParam, LPARAM lParam传递信息  else MessageBox("FindWindow NULL"); } MFC另 建立一Dialog 应用程序,工程名字:Client 在 其 OnInitDialog里最后添加代码SetWindowText("Client"); 在Client.h里添加自己的消息:#define WM_COMM WM_USER+10 添加消息映射: BEGIN_MESSAGE_MAP(CSenderDlg, CDialog) //{{AFX_MSG_MAP(CSenderDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGIC......

阅读全文(4996) | 评论:0

VC++中进程间相互通信的十一种方法 (2006-09-25 11:46:00)

摘要: VC++中进程间相互通信的十一种方法 出处:VC源动力  进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:   一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方   另一个是地址空间,它包含所有的可执行模块或DLL模块的代码和数据。它还包含动态分配的空间。如线程堆栈和堆分配空间。每个进程被赋予它自己的虚拟地址空间,当进程中的一个线程正在运行时,该线程可以访问只属于它的进程的内存。属于其它进程的内存则是隐藏的,并不能被正在运行的线程访问。   为了能在两个进程之间进行通讯,由以下几种方法可供参考:   1、剪贴板Clipboard: 在16位时代常使用的方式,CWnd中提供支持   2、窗口消息 标准的Windows消息以及专用的WM_COPYDATA消息 SENDMESSAGE()接收端必须有一个窗口   3、使用共享内存方式(Shared Memory)   a.设定一块共享内存区域 HANDLE CreateFileMapping(HANDLE,LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD, LPCSTR)    产生一个file-mapping核心对象 LPVOID MapViewOfFile( HANDLE hFileMappingObject, DWORD dwDesiredAcess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, DWORD dwNumberOfBytesToMap );   得到共享内存的指针   b.找出共享内存   决定这块内存要以点对点(peer to peer)的形式呈现每个进程都必须有相同的能力,产生共享内存并将它初始化。每个进程都应该调用CreateFileMapping(),然后调用GetLastError().如果传回的错误代码是ERROR_ALREADY_EXISTS,那么进程就可以假设这一共享内存区 域已经被别的进程打开并初始化了,否则该进程就可以合理的认为自己 排在第 一位,并接下来将共享内存初始化。   还是要使用client/server架构中只有server进程才应该产生并初始化共享内存。所有的进程都应该使用 HANDL......

阅读全文(1940) | 评论:0

11种经典软件滤波的原理和实现(2006-09-24 23:07:00)

摘要:11种经典软件滤波的原理和实现   1、限幅滤波法(又称程序判断滤波法)    A、方法:        根据经验判断,确定两次采样允许的最大偏差值(设为A)        每次检测到新值时判断:        如果本次值与上次值之差<=A,则本次值有效        如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值    B、优点:        能有效克服因偶然因素引起的脉冲干扰    C、缺点        无法抑制那种周期性的干扰        平滑度差    2、中位值滤波法    A、方法:        连续采样N次(N取奇数)        把N次采样值按大小排列        取中间值为本次有效值    B、优点:        能有效克服因偶然因素引起的波动干扰        对温度、液位的变化缓慢的被测参数有良好的滤波效果    C、缺点:        对流量、速度等快速变化的参数不宜3、算术平均滤波法    A、方法:        连续取N个采样值进行算术平均运算        N值较大时:信号平滑度较高,但灵敏度较低       &nb......

阅读全文(274) | 评论:0

MATLAB常用命令 (2006-09-24 23:05:00)

摘要:MATLAB常用命令 小整理:MATLAB常用的基本数学函数 abs(x):纯量的绝对值或向量的长度 angle(z):复数z的相角(Phase angle) sqrt(x):开平方 real(z):复数z的实部 imag(z):复数z的虚部 conj(z):复数z的共轭复数 round(x):四舍五入至最近整数 fix(x):无论正负,舍去小数至最近整数 floor(x):地板函数,即舍去正小数至最近整数 ceil(x):天花板函数,即加入正小数至最近整数 rat(x):将实数x化为分数表示 rats(x):将实数x化为多项分数展开 sign(x):符号函数 (Signum function)。 当x<0时,sign(x)=-1; 当x=0时,sign(x)=0; 当x>0时,sign(x)=1。 rem(x,y):求x除以y的馀数 gcd(x,y):整数x和y的最大公因数 lcm(x,y):整数x和y的最小公倍数 exp(x):自然指数 pow2(x):2的指数 log(x):以e为底的对数,即自然对数或 log2(x):以2为底的对数 log10(x):以10为底的对数 =============================================== 小整理:MATLAB常用的三角函数 sin(x):正弦函数 cos(x):馀弦函数 tan(x):正切函数 asin(x):反正弦函数 acos(x):反馀弦函数 atan(x):反正切函数 atan2(x,y):四象限的反正切函数 sinh(x):超越正弦函数 cosh(x):超越馀弦函数 tanh(x):超越正切函数 asinh(x):反超越正弦函数 acosh(x):反超越馀弦函数 atanh(x):反超越正切函数 =============================================== 变数也可用来存放向量或矩阵,并进行各种运算,如下例的列向量(Row vector)运算:   x = [1 3 5 2]; y = 2*x+1 y = 3 7 11 5 =============================================== 小提示:变数命名的规则    1.第一个字母必须是英文字母 &nbs......

阅读全文(465) | 评论:0

ansys分析步骤(小结)(2006-09-24 22:55:00)

摘要:1。ANSYS的几何建模 1-1 建模前的问题规划 1-2 自底向上建模方法 1-3 自顶向下建模方法 1-4  实体模型的布尔运算 1-5 从其他CAD系统导入模型 2。创建几何模型 2-1 选定单元类型 2-2 设置实常数 2-3 定义材料属性 2-4 实体模型的网格划分 2-5 网格划分控制 2-6 网格质量检查和修改 2-7 直接生成网格的方法 3。施加载荷 3-1 自由度约束条件的施加 3-2 施加载荷 4。求解 4-1 求解多步载荷 4-2 分析中的中断和重启动 4-4 求解参数估计 5。ANSYS后 处理 5-1 通用后处理 5-2 时间历程后处理    ......

阅读全文(3454) | 评论:0

自己敲的一个简单Thread例子 (vc6)(2006-09-24 22:37:00)

摘要://Demo1.cpp //#include "stdafx.h"#include "iostream.h"//#include"process.h"//CreateThread(),ExitThread(),CloseHandle()#include "windows.h"#include "stdio.h" /////////////////////////////////////线程 例子1/////////////////////////*BOOL repeat=TRUE; //几个线程共享全局变量repeatDWORD WINAPI MyThread1(LPVOID lpParameter){ while(repeat) {  printf("How are you? -----1-------MyThread1\n");  Sleep(5); //// } DWORD exitCode; ExitThread(exitCode);  return 0;} DWORD WINAPI MyThread2(LPVOID lpParameter){ while(repeat) {  printf("Very Well! ------2------MyThread2\n");  Sleep(1);/// } DWORD exitCode; ExitThread(exitCode);  return 0;} DWORD WINAPI KillThread(LPVOID lpParameter){ repeat=FALSE; return 0;} int main(int argc,char* argv[]){ HANDLE handle1,handle2,handle3; DWORD dw1,dw2,dw3;  handle1=CreateThread(NULL,0,MyThread1,NULL,0,&dw1); if(handle1==NULL) { &nb......

阅读全文(10925) | 评论:1

USB摄像头编程(2006-09-24 21:44:00)

摘要:USB摄像头编程 (vcer.net)   注意包含头文件qedit.h,dshow.h 几个函数如下,其中有一些全局变量,程序写的充忙,也就不整理了。参考了一些资料。 BOOL initVideo(void) { AM_MEDIA_TYPE   amt; CoInitialize(NULL);                                     // COM的初期化         // ---- 输入计算的准备 ----         // 搜索输入装置         IBaseFilter  *pbf = NULL;         IMoniker * pMoniker = NULL;     ULONG cFetched;     // 制作装置的各个部分     CoCreateInstance( CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC,                             &nbs......

阅读全文(404) | 评论:0

在工具条中加入组合框控件(2006-09-24 21:42:00)

摘要:在工具条中加入组合框控件 vcer.net 代码内容 首先打开VC的工具条资源编辑器,如图一所示,在要加入组合框的地方加一个空按纽,如图一所示的第四个按纽,分配一个ID号,在本文的实例中为IDC_COMBOX。 工具条应该封装为一个类,组合框控件应该作为这个类的一个成员变量。生成一个以CToolBar为基类的的新类CComboToolBar,这可以用VC的类向导(ClassWizard)来实现,先生成一个以CToolBarCtrl为基类的新类CComboToolBar,然后在文件编辑器中打开ComboToolBar.h和ComboToolBar.cpp文件,把CComboToolBar基类改为CToolBar。新类生成后,加入成员变量CComboBox m_combobox。 然后把CMainFrame类中的工具条成员变量m_wndToolBar的类型由CToolBar改为CComboToolBar。编辑应用程序向导已经生成好的函数int CMainFrame::OnCreate (LPCREATESTRUCT lpCreateStruct),这个函数通常用来产生工具条和状态条,在创建工具条的函数后加入以下代码: CRect rect; //设置组合框的宽度,四个参数依次为控件在工具条中的索引号、ID号、风格、宽度 m_wndToolBar.SetButtonInfo(4, IDC_COMBOX, TBBS_SEPARATOR, 160 ); //得到组合框的位置 m_wndToolBar.GetItemRect(4, &rect); //设置组合框的高度 rect.bottom += 100; //COMBO HEIGHT; //创建组合框,四个参数依次为窗口风格、组合框位置、父窗口、ID号 if(!m_wndToolBar.m_combobox.Create (CBS_DROPDOWN|WS_VISIBLE|WS_TABSTOP|CBS_AUTOHSCROLL,rect, &m_wndToolBar, IDC_COMBOX))     return -1; //在组合框中加入字符串 m_wndToolBar.m_combobox.AddString("......

阅读全文(496) | 评论:0

全屏显示视图的代码 vc(2006-09-24 21:39:00)

摘要:开启全屏显示的代码: void CViewerFrame::FullScreenShow(){ GetWindowPlacement(&m_OldWndPlacement); CRect WindowRect; GetWindowRect(&WindowRect); CRect ClientRect; RepositionBars(0,0xffff,AFX_IDW_PANE_FIRST,reposQuery,&ClientRect); ClientToScreen(&ClientRect);  int nFullWidth=GetSystemMetrics(SM_CXSCREEN); int nFullHeight=GetSystemMetrics(SM_CYSCREEN); m_FullScreenRect.left=WindowRect.left-ClientRect.left-1; m_FullScreenRect.top=WindowRect.top-ClientRect.top-1; m_FullScreenRect.right=WindowRect.right-ClientRect.right+nFullWidth+2; m_FullScreenRect.bottom=WindowRect.bottom-ClientRect.bottom+nFullHeight+2; m_FullScreen=TRUE;   WINDOWPLACEMENT wndpl; wndpl.length=sizeof(WINDOWPLACEMENT); wndpl.flags=0; wndpl.showCmd=SW_SHOWNORMAL; wndpl.rcNormalPosition=m_FullScreenRect;  ShowWindow(SW_HIDE); SetWindowPlacement(&wndpl);} 关闭全屏显示的代码: void CViewerFrame::EndFullScreen(......

阅读全文(3365) | 评论:0

vc常见控件推荐(2006-09-24 21:37:00)

摘要:VC 控件 教程   1 常见控件推荐 以下向大家推荐一些比较有用的控件: 1.1 MsChart控件 控件名称:Microsoft Chart Control 6.0 (sp4) 控件类:CMsChart 控件简介:MsChart是微软制作的功能强大的图表工具,用它可以很方便的建立各种图表,包括各种二维、三维的饼图、折线图、直方图、折线图、面积图等。 应用图例: 图40 MsChart控件应用图例 1.2 DataGrid控件 控件名称:Microsoft DataGrid Control 6.0 (sp5) 控件类:CDataGrid 控件简介:DataGrid控件是由微软提供的数据表格控件,需要与ADODC控件配合使用。通过使用DataGrid控件,可以很方便地实现数据表记录的浏览、增加、删除和修改功能。 应用图例: 图41 DataGrid控件应用图例 1.3 MsComm控件 控件名称:Microsoft Communications Control version 6.0 控件类:CMsComm 控件简介:MSComm 控件提供了一系列标准通讯属性和方法,使用它可以建立起应用程序与串行端口的联接。 应用图例: 图42 MsComm控件应用图例 以上画面来源于笔者自行制作的手机通讯软件FreePhone,其底层采用MsComm控件,感兴趣的读者可以参见http://bluejoe.yeah.net。 1.4 Web浏览器控件 控件名称:Web浏览器控件 控件类:CWebBrowser2 控件简介:Web浏览器相信大家再也熟悉不过了,IE浏览器就内嵌了一个Web浏览器控件,这也就是为什么腾讯浏览器与IE如此相似的原因。通过使用Web浏览器控件,可以很方便地实现网页页面的浏览和显示。 应用图例: 图43 Web浏览器控件应用图例 1.5 ActiveMovie控件 控件名称:ActiveMovie Control Object 控件类:CActiveMovie3 控件简介:ActiveMovie是Microsoft公司开发的视频播放控件。该控件内嵌了Microsoft MPEG音频解码器和Microsoft MPEG视频解码器,播放控制更加简捷方......

阅读全文(326) | 评论:0