C语言自定义消息函数的等待怎么写?

C语言自定义消息函数的等待怎么写?,第1张

消息队列的等待就是GetMessage,没办法自己写,除非你打算改Windows本身。这个函数如果没有消息进来就会释放CPU,如果不希望等待用PeekMessage。消息循环的格式是固定的。

你把:
afx_msg
LRESULT
OnReciveData(WPARAM
wParam,
LPARAM
lParam);
放在
//}}AFX_MSG
之后即可。
在//{{AFX_MSG和//}}AFX_MSG之间的内容由向导自动维护,你不要把自定义的东西放在那。

第一步、在头文件中自定义消息,如:
[cpp]
#define WM_USER_MSG (WM_USER +100)
第二步、通过类向导点击Message选项卡,添加自定义消息WM_USER_MSG
第三步、实现自定义消息的响应函数
第四步、发送消息
发送消息有两种方式
1、同步发送(SendMessage)
[plain]
LRESULT SendMessage(
UINT message,
WPARAM wParam = 0,
LPARAM lParam = 0
);
message:消息ID
wParam:参数1
lParam:参数2
返回值:消息函数函数的处理结果
这里同步发送是指发送消息并处理完后才返回如:
>/ 创建自定义消息程序步骤: 1:用ClassWard创建一个新project命名为:MessageTest 2:此project选单文档,取消Active X支持,取消打印支持,其它默认。finish 3:在菜单中添加一个菜单“测试”其子菜单为"test",并映射其执行方法:OnTest 4: 制造消息发送者:在资源中新增一个对话框,并用classward为其创建类名为 TestDialog然后在此对话框中加入一个Button,并用classward为其映射执行函数 OnButton1()。 5:在TestDialogh文件中加入一行#define WM_MY_MESSAGE (WM_USER+100) 用来定义自己的消息 6:在TestDialogcpp文件中加入一行:#include "MainFrmh" 7:为对话框的Button按钮加入发送消息代码如下: void TestDialog::OnButton1() { // TODO: Add your control notification handler code here //获取当前框架指针 CMainFrame pMainFrame=(CMainFrame )AfxGetApp()->m_pMainWnd; //获取当前view指针 CView pView=pMainFrame->GetActiveView(); if(pView!=NULL) { pView->PostMessage(WM_MY_MESSAGE,0,0); } } 以上是对于消息的发送者工作己完成 8:以下是对于消息接收者 在MessageTestViewh中也要定义:#define WM_MY_MESSAGE (WM_USER+100) 9:并在MessageTestViewh中定义消息映射函数如下: protected: //{{AFX_MSG(CMessageTestView) afx_msg void OnTest(); afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); //此处为自定义消息映射函数 //}}AFX_MSG DECLARE_MESSAGE_MAP() 10:在MessageTestViewcpp文件中,声明消息响应函数如下: BEGIN_MESSAGE_MAP(CMessageTestView, CView) //{{AFX_MSG_MAP(CMessageTestView) ON_MESSAGE(WM_MY_MESSAGE,OnMyMessage) //自定义消息响应函数 ON_COMMAND(ID_TEST, OnTest) //}}AFX_MSG_MAP END_MESSAGE_MAP() 11:在MessageTestViewcpp文件中实现消息响应函数如下: LRESULT CMessageTestView::OnMyMessage(WPARAM wParam,LPARAM lParam) { MessageBox("OnMyMessage!Receiver"); return 0; } 12:将消息发送者与消息响应者联系起来。即:将对话框与菜单联系起来。 实现CMessageTestView的OnTest方法如下: void CMessageTestView::OnTest() { // TODO: Add your command handler code here TestDialog dlg; dlgDoModal(); } 13:以上完成了所有自定义消息过程 / //////////////////////////////////////////////////////////////// 2:如何编写一个程序在运行后马上删除自己。 / 以下代码在VCnet2002、BCB60、DevC++498环境下均编译通过,并正常运行 / / Creamdog保留所有权力 / #include int main( int argc, char argv[] ) { HMODULE module = GetModuleHandle(0); CHAR buf[MAX_PATH]; GetModuleFileName(module, buf, sizeof buf); CloseHandle(HANDLE(4)); __asm { lea eax, buf; push 0; push 0; push eax; push ExitProcess; push module; push DeleteFile; push UnmapViewOfFile; ret; } return 0; }
希望采纳

1。用sendmessage要确定一定要待主程序窗口完全初始化后把窗口对象的m_hwnd告诉dll才行,
2用Postthreadmessage此时发送消息的目标窗口句柄为空,此消息要在Pretranslagemessage中处理
OnCreate函数在系统调用Create或CreateEx创建窗口前被调用,要确定下此时m_hwnd的值是否有效就行另外你说的WM_SEND在主函数里定义,此消息是否也传给了dll

win32有个消息回调函数,在那里面对消息进行处理就可以了。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

程序功能:读取c:\sourcetxt文件的内容,
取其中'#'开头行的内容写入c:\desttxt中。
如:sourcetxt文件内容为如下:
#jksfjlsd
12jlkdjfsl
#jfiejw
#jkfldsl
iejfja;fj
则程序会产生一个desttxt文件内容如下:
#jksfjlsd
#jfiejw
#jkfldsl
/
#include <stdioh>
#include <stdlibh>
#include <stringh>
int main()
{
FILE fp1;
FILE fp2; //申明2个文件指针,一个打开源文件,一个打开目标文件
char buf[1024]; //申明一个大字符数组,用于保存文件每一个行的内容

这是VC自己的一个Bug,要解决这个问题的话,你手动添加的消息函数不要放在 //{{AFX_MSG() //}}AFX_MSG 之间就行,否则VC有可能把你自己添加的消息删掉而不给出任何提示。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/13391923.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-27
下一篇 2023-07-27

发表评论

登录后才能评论

评论列表(0条)

保存