博文
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......
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......
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......
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......
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 时间历程后处理
......
自己敲的一个简单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......
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......
在工具条中加入组合框控件(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("......
全屏显示视图的代码 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(......
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视频解码器,播放控制更加简捷方......
