- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
WinForm的开发者们,想必对PostMessage和SendMessage两个API都.doc
小技巧分享:使用PostMessage向表單傳遞任何資料
WinForm的開發者們,想必對PostMessage和SendMessage兩個API都非常熟悉了。下面給出PostMessage函數在C#中的兩種聲明形式:
代碼
[DllImport(user32.dll , CharSet = CharSet.Unicode)]static extern bool PostMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);[DllImport(user32.dll , CharSet = CharSet.Unicode)]static extern bool PostMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
wParam參數和lParam參數是一個32位(在32位元的系統中)的整型。因為C++支援指標,wParam和lParam可以是指向任意類型物件的指標(指標本質上就是整型),而C#不支持指標,所以wParam參數和lParam參數只能為int型或IntPtr型。這就限制了我們向控制項傳遞任意的資料類型。
當然IntPtr有類似指標的作用,但我們又如何使自訂類型的物件獲得IntPtr呢?當然會想到用System.Runtime.InteropServices.Marshal.StructureToPtr()方法,使用該方法,不但有諸多限制,而且效率極為低下(因為需要額外分配記憶體和進行記憶體拷貝)。
今天我和大家分享一個“曲線救國”的方法和該方法的一些使用場景。
首先定義一個用於承載傳遞資料的類或結構,可以如下:
代碼
/// summary/// 資料傳遞類/// /summarypublic class DataTransfer{/// summary/// 傳遞的字串/// /summarypublic string transferMessage;/// summary/// 傳遞的其他任意類型的資料/// /summarypublic object obj;}
您可以自訂DataTransfer類來承載你需要傳遞的資料,裡面的transferMessage和obj欄位就是你要傳遞的實際資料。
定義一個類型為Dictionaryint, DataTransfer的集合物件datas,當你需要給某控制項傳遞資料時,先生成一個DataTransfer物件value,把value加入到datas集合中,則會獲得從datas中提取該value的資料鍵key(關鍵是該key是整型的),調用PostMessage把key賦值給wParam參數或lParam參數發送消息到表單,表單收到消息後用key來datas中提取資料,再把datas中該鍵值對刪除。這樣貌似就達到了利用 PostMessage函數向控制項發送任意類型資料的目的。當然,我們可以定義一個傳遞資料的輔助類,該輔助類看起來應該像是這樣子的:
代碼
/// summary/// 傳遞資料的輔助類/// /summaryclass TransferDataHelper{/// summary/// 自訂消息號/// /summarypublic const int User_Message = 0x401;/// summary/// 資料集合/// /summarystatic Dictionaryint, DataTransfer datas;/// summary/// 執行緒同步對象/// /summarystatic object objLock;/// summary/// 資料鍵,用於標記資料/// /summarystatic int dataKey=0;[DllImport(user32.dll , CharSet = CharSet.Unicode)]private static extern bool PostMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);static TransferDataHelper(){datas = new Dictionaryint, DataTransfer();objLock = new object();}/// summary/// 傳遞資料/// /summary/// param name=value/param/// param name=formHandle/parampublic static voi
您可能关注的文档
- 96学年度-新竹教育大学教务处.doc
- 97学年度台北市国语实验国民小学三年级资讯领域教学计划.doc
- 97学年度第2学期期中考(一)复习试题商经、资处科一年班座号姓名.doc
- 98-1学期第七~九周单元一~21世纪的基因科技、希望与梦魇.doc
- 98年度温室气体盘查报告书-国立台南艺术大学.doc
- 9th土工合成材料学术会议论文模板.doc.doc
- ABBEIB_i-bus在智能别墅控制系统中的应用-江苏纺织服装职业教育集团.doc
- Access_4.ppt-高等教育出版社.ppt
- ACM常用算法设计-吉林师范大学.doc
- ADO.NET对象-网络教育精品资源共享课-上海交通大学.ppt
- 精选合同书买卖合同书2025年通用.docx
- 2025届高三生物二轮复习课件育种技术微专题.pptx
- 4.1人类活动对生态环境的影响课件高二上学期生物人教版选择性必修2.pptx
- 精选合作人合伙协议书2025年通用.docx
- 精选合伙美容院协议书2025年通用.docx
- 6.3细胞的分化课件高一上学期生物人教版(2019)必修1.pptx
- 6.2 自然选择与适应的形成(课件)高一下学期生物人教版(2019)必修2.pptx
- 高三生物一轮复习课件 第6讲 体液调节与神经调节的关系.pptx
- 高三生物一轮复习课件第1讲 走近细胞2.pptx
- 6.3细胞的分化课件-高一上学期生物人教版(2019)必修1.pptx
最近下载
- 中国视疲劳诊疗专家共识(2024年).pptx
- (完整版)克鲁格曼国际经济学理论与政策第十10版课后题习题答案-1.doc
- 2024年陕西省初中信息技术学业水平考试题库附答案(共4套).pdf
- 《2025年国家医疗质量安全改进目标》解读PPT课件.pptx VIP
- 实验4:条件分支结构基本应用.docx VIP
- 2024年高级经济师《财政税收》试题及答案(最完整版) .pdf VIP
- AP英语语言与写作 2021年真题 附答案和评分标准 AP English Language and Composition 2021 Exam with Answers.pdf VIP
- 电梯安装工程全套报验资料.pdf
- 中医技术操作规范 颊针.pdf
- 2024年高级经济师《财政税收》试题及答案(最完整版).docx
文档评论(0)