windows 编程的问题

来源:百度知道 编辑:UC知道 时间:2024/06/09 01:32:17
int WINAPI WinMain()中的参数和消息是怎样传递的,执行中的函数是怎样得到参数的?这好像与C语言的很不一样?不如WinProc()是如何获得参数,还有TranslateMessage(&msg)?请详细点,最好没个过程,机理都讲!谢谢(因为书本有很多不详细的答案,所以谢绝不详细的答案)

入口函数winmain:
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
hinstance应用程序实例句柄,程序运行后由windows传递给程序,程序需要时直接引用就行了.
hPrevInstance不要管它,win16产物
lpCmdLine 命令行文本串,如dos 下的copy 参数1,参数2一样,给程序提供参数(很少用了),可从开始-运行里输入程序名 参数列表来启动,程序将得到相应值
nCmdShow 程序启动后是最大化还是正常等等
以上是系统向程序进行的参数传递

程序以后将创建窗口类,并建立窗口,然后转向消息循环.
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
同时你还有自己的WinProc()过程
PeekMessage将消息队列中关于本程序的事件如按键、点鼠标等事件描述放到msg结构
TranslateMessage(&msg)进行必要的消息转换
DispatchMessage(&msg)将该消息分发至相应的窗口过程,窗口过程对消息进行必要的处理,就完成了系统的功能。

DispatchMessage(&msg)发送消息出去后,将消息回传给操作系统。消息是由MSG结构体对象来表示的,其中就包含了接收消息的窗口的句柄;系统利用WNDCLASS结构体的lpfnWndProc成员保存的窗口过程函数WinProc()的指针调用窗口过程,对消息进行处理

TranslateMessage函数用于将虚拟键消息转换为字符消息。字符消息被投递到调用线程的消息队列中,当下一次调用GetMessage函数时被取出。(先不用管它,反正就是取消息-发送消息)

学习