博文
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......
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......
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......
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):反超越正切函数
===============================================
变数也可用来存放向量或矩阵,并进行各种运算,如......
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; //几个线程共享全局变量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......
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......
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视频解码器,播......