博文

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_W......

阅读全文(4933) | 评论: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_EXIS......

阅读全文(1843) | 评论: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、方法:
     &nbs......

阅读全文(191) | 评论: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):反超越正切函数
===============================================
变数也可用来存放向量或矩阵,并进行各种运算,如......

阅读全文(410) | 评论: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 时间历程后处理    ......

阅读全文(3377) | 评论: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; //几个线程共享全局变量repeat
DWORD 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 ha......

阅读全文(10865) | 评论: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......

阅读全文(293) | 评论: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("......

阅读全文(407) | 评论: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......

阅读全文(3255) | 评论: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视频解码器,播......

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