这个是孙鑫的c++深入详解的第一章,/////////////////////////////////////////////////
////////////////这里的消息msg没有和CALLBACK WinMeadProcess这个消息处理函数关联
///////////////////程序怎么将msg传入函数WinMeadProcess
小弟以前写过几个java程序,现在看vc,有点莫名其妙.............#include <windows.h>
#include <stdio.h>LRESULT CALLBACK WinMeadProcess(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
){
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDI_ERROR);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance; wndcls.lpfnWndProc=WinMeadProcess;
wndcls.lpszClassName="mead";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndcls);
HWND hwnd;
hwnd=CreateWindow("mead","Here is title, right?",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
/////////////////////////////////////////////////
////////////////这里的消息msg没有和CALLBACK WinMeadProcess这个消息处理函数关联
///////////////////程序怎么将msg传入函数WinMeadProcess
MSG msg;
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
MSG msg2;
while(GetMessage(&msg2,NULL,0,0)){
//TranslateMessage(&msg);
//DispatchMessage(&msg);
}
return msg.wParam;
}LRESULT CALLBACK WinMeadProcess(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
){
switch(uMsg){
case WM_CHAR:
char szChar[20];
sprintf(szChar,"char code is %d",wParam);
MessageBox(hwnd,szChar,"char,title here, right???",MB_YESNO);
break;
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse cliched","message",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"here will show the Text now, right???",strlen("here will show the Text now, right???"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"I really wanne learn cpp hard...",strlen("I really wanne learn cpp hard..."));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
//messageBox type is: YES or No....
if(
IDYES==
MessageBox
(hwnd,"这么好的程序,你真的要关闭吗?别关闭好吗???","message,title here, right???",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
////////////////这里的消息msg没有和CALLBACK WinMeadProcess这个消息处理函数关联
///////////////////程序怎么将msg传入函数WinMeadProcess
小弟以前写过几个java程序,现在看vc,有点莫名其妙.............#include <windows.h>
#include <stdio.h>LRESULT CALLBACK WinMeadProcess(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
){
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDI_ERROR);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance; wndcls.lpfnWndProc=WinMeadProcess;
wndcls.lpszClassName="mead";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndcls);
HWND hwnd;
hwnd=CreateWindow("mead","Here is title, right?",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
/////////////////////////////////////////////////
////////////////这里的消息msg没有和CALLBACK WinMeadProcess这个消息处理函数关联
///////////////////程序怎么将msg传入函数WinMeadProcess
MSG msg;
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
MSG msg2;
while(GetMessage(&msg2,NULL,0,0)){
//TranslateMessage(&msg);
//DispatchMessage(&msg);
}
return msg.wParam;
}LRESULT CALLBACK WinMeadProcess(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
){
switch(uMsg){
case WM_CHAR:
char szChar[20];
sprintf(szChar,"char code is %d",wParam);
MessageBox(hwnd,szChar,"char,title here, right???",MB_YESNO);
break;
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse cliched","message",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"here will show the Text now, right???",strlen("here will show the Text now, right???"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"I really wanne learn cpp hard...",strlen("I really wanne learn cpp hard..."));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
//messageBox type is: YES or No....
if(
IDYES==
MessageBox
(hwnd,"这么好的程序,你真的要关闭吗?别关闭好吗???","message,title here, right???",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
解决方案 »
- 如何在listctrl中显示指定路径下的所有文件?名称?图标?
- 用VC生成项目时有几个不同的类,大家能给大概解释下他们的不同吗?
- 请问一个CtreeCtrl和CTreeView的问题
- 修改聊天窗口的属性,使它不在任务栏显示
- 【孙鑫vc++视频教程】【rm】【孙鑫老师的VC视频已免费发放】
- 请教,如何用打点法显示bmp图象! 谢谢帮助!!!
- 急!解决此问题者奉送200分!!! up有分!!
- 反正我不是高手,也不怕笑话,请教LPSTR与LPCTSTR有什么不同?
- 请高手注释一下这段代码,来自codeproject
- 有点奇怪,关于CSimpleList类
- 如何做一个让一个插件从一个类型库实现
- 请问:直线插补是否能画曲线
这句关联了啊
这不就关联了吗?理解windows 消息机制!!
当调用GetMessage这个函数的时候,会创建一个消息的线程队列,当有事件触发的时候,操作系统会把相应的消息投递到相应的线程队列里面,然后,应用程序通过GetMessage来取消息,并把消息分派给窗口过程处理!大概就是这样!
请教一下大家,vc++现在还有学习的必要吗?
现在大家都用net,还有操作系统也要变了
Windows7都要出来了,会不会和其它工具一样要被淘汰呀?
可能Windows7都没有MFC的框架了哦?用NET的框架了.
vc++好像挺复杂的,有点要命....
呵呵
////////////////这里的消息msg没有和CALLBACK WinMeadProcess这个消息处理函数关联
///////////////////程序怎么将msg传入函数WinMeadProcess
MSG msg;
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
DispatchMessage(&msg);这句会把消息传回给操作系统,操作系统会再把这个消息分发到窗体的回调函数处理,回调函数你已经通过RegisterClass注册了,所以操作系统知道这个回调函数。如果没有DispatchMessage(&msg);这句你的窗体回调函数将不会接收到任何消息,不信你把它拿掉看看。
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDI_ERROR);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance; wndcls.lpfnWndProc=WinMeadProcess;
wndcls.lpszClassName="mead";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndcls);
这段代码是让 WinMeadProcess 跟一个窗口类关联,
RegisterClass(&wndcls); 是让这个窗口类跟系统关联,注意,是系统,就是操作系统
然后还是操作系统去调用 WinMeadProcess ,这个跟java的确很多不一样。