设置全局变量为什么没有成功!!!
来源:互联网 发布:济南seo公司 编辑:程序博客网 时间:2024/04/30 19:39
问题描述:见代码红色部分
// DEMO3_1.CPP - Demo of loading an icon and cursor resource
// INCLUDES ///////////////////////////////////////////////
#define WIN32_LEAN_AND_MEAN // just say no to MFC
#include <windows.h> // include all the windows headers
#include <windowsx.h> // include useful macros
#include <mmsystem.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include<tchar.h>
//#include "DEMO3_1RES.H" // include the resource header
// DEFINES ////////////////////////////////////////////////
// defines for windows
#define WINDOW_CLASS_NAME "WINCLASS1"
#define TIMER_ID_1SEC 1
#define TIMER_ID_3SEC 3
// GLOBALS ////////////////////////////////////////////////
HWND main_window_handle = NULL;///全局变量声明
HINSTANCE main_instance = NULL;
#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
// FUNCTIONS //////////////////////////////////////////////
//LRESULT CALLBACK TimerProc(HWND)
LRESULT CALLBACK WindowProc(HWND hwnd,
UINT msg,
WPARAM wparam,
LPARAM lparam)
{
// this is the main message handler of the system
PAINTSTRUCT ps; // used in WM_PAINT
HDC hdc; // handle to a device context
TCHAR buffer[80];
static int counter1=0, // counters
counter3=0;
// what is the message
switch(msg)
{
case WM_CREATE:
{
// do initialization stuff here
////设置定时器
SetTimer(hwnd,TIMER_ID_1SEC,1000,NULL); ///////这里用全局变量main_window_handle为什么不行???
//MSDN给出的解释
/*The WM_CREATE message is sent when an application requests that a window be created by
calling the CreateWindowEx or CreateWindow function. (The message is sent before the function returns.)
The window procedure of the new window receives this message after the window is created,
but before the window becomes visible.
*/
SetTimer(hwnd,TIMER_ID_3SEC,3000,NULL);
// return success
return(0);
} break;
case WM_TIMER:
{
////what timer fired?
switch(wparam)
{
case TIMER_ID_1SEC:
{
//MessageBox(hwnd,TEXT("timer 1 fired!"),"Timer 1",MB_OK);
// print out a message
// get the dc
hdc = GetDC(hwnd);
// set the color
SetTextColor(hdc,RGB(0,255,0));
SetBkColor(hdc,RGB(0,0,0));
SetBkMode(hdc,OPAQUE);
// build up the messages
sprintf(buffer,"The 1 second timer has fired %d times",++counter1);
// print the message
TextOut(hdc,0,0,buffer,strlen(buffer));
// release the dc
ReleaseDC(hwnd,hdc);
}
break;
case TIMER_ID_3SEC:
{
//MessageBox(hwnd,TEXT("timer 3 fired!"),NULL,MB_OK);
// make a beep
MessageBeep(MB_ICONEXCLAMATION);
// get the dc
hdc = GetDC(hwnd);
// set the color
SetTextColor(hdc,RGB(0,255,0));
SetBkColor(hdc,RGB(0,0,0));
SetBkMode(hdc,OPAQUE);
// build up the messages
sprintf(buffer,"The 3 second timer has fired %d times",++counter3);
// print the message
TextOut(hdc,0,20,buffer,strlen(buffer));
// release the dc
ReleaseDC(hwnd,hdc);
}
break;
}
}
break;
case WM_PAINT:
{
// simply validate the window
hdc = BeginPaint(hwnd,&ps);
// you would do all your painting here
//TextOut(hdc,0,0,buffer,strlen(buffer));
EndPaint(hwnd,&ps);
// return success
return(0);
} break;
/* case WM_CLOSE:
{
///display message box
int result = MessageBox(hwnd,TEXT("Close The Window???"),TEXT("Null"),MB_YESNO);
///does the uders want to close ?
if (IDYES == result)
return DefWindowProc(hwnd,msg,wparam,lparam);///call default handler
return 0; /////throw message away
}break;
*/
//////调用顺序:WM_CLOSE---->WM_DESTROY--->WM_QUIT
case WM_DESTROY:
{
// kill the application, this sends a WM_QUIT message
KillTimer(hwnd,TIMER_ID_1SEC);
KillTimer(hwnd,TIMER_ID_3SEC);
PostQuitMessage(0);
// return success
return(0);
} break;
default:break;
} // end switch
// process any messages that we didn't take care of
return (DefWindowProc(hwnd, msg, wparam, lparam));
} // end WinProc
///start game main
void Game_Main()
{
}
// WINMAIN ////////////////////////////////////////////////
int WINAPI WinMain( HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{
WNDCLASSEX winclass; // this will hold the class we create
HWND hwnd; // generic window handle
MSG msg; // generic message
// first fill in the window class stucture
winclass.cbSize = sizeof(WNDCLASSEX);
winclass.style = CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc = WindowProc;
winclass.cbClsExtra = 0;
winclass.cbWndExtra = 0;
winclass.hInstance = hinstance;
winclass.hIcon = LoadIcon(hinstance, IDI_APPLICATION);
winclass.hCursor = LoadCursor(hinstance, IDC_ARROW);
winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
winclass.lpszMenuName = NULL;
winclass.lpszClassName = WINDOW_CLASS_NAME;
winclass.hIconSm = LoadIcon(hinstance, IDI_APPLICATION);
// register the window class
if (!RegisterClassEx(&winclass))
return(0);
// create the window
if (!(hwnd = CreateWindowEx(NULL, // extended style
WINDOW_CLASS_NAME, // class
"Demo of Custom Cursor and Icon", // title
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0,0, // initial x,y
400,400,
//GetSystemMetrics(SM_CXFULLSCREEN),
//GetSystemMetrics(SM_CYFULLSCREEN), // initial width, height
NULL, // handle to parent
NULL, // handle to menu
hinstance,// instance of this application
NULL))) // extra creation parms
return(0);
main_window_handle = hwnd; ///未执行到此句就触发WM_CREATE消息,所以此时定时器中全局变量main_window_handle任然为NULL
main_instance = hinstance;
// enter main event loop, but this time we use PeekMessage()
// instead of GetMessage() to retrieve messages
while(TRUE)
{
// test if there is a message in queue, if so get it
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
// test if this is a quit
if (msg.message == WM_QUIT)
break;
// translate any accelerator keys
TranslateMessage(&msg);
// send the message to the window proc
DispatchMessage(&msg);
} // end if
// main game processing goes here
//Game_Main(); // or whatever your loop is called
if(KEYDOWN(VK_ESCAPE))
SendMessage(hwnd,WM_CLOSE,0,0);////////WM_QUIT为什么不行????
} // end while
// return to Windows like this
return(msg.wParam);
} // end WinMain
///////////////////////////////////////////////////////////
- 设置全局变量为什么没有成功!!!
- 为什么全局变量没有发生变化?
- 为什么没有成功识别出骚扰电话?
- 部署linux mysql如果没有设置成功
- 为什么Docker没有在生产环境取得广泛成功
- 没有任何错误提示,为什么xmanager也不能成功安装
- ZigBee自组网技术为什么没有取得预期的成功
- 普元EOS/BPS为什么没有安装成功 ?
- Z-Tree成功引入样式表,为什么没有样式?
- 设置了LaunchImage为什么没有显示
- 为什么我设置焦距没有效果
- 为什么我设置焦距没有效果
- 一个成功的人或企业为什么没有获得持续成功:有节制的减少追求
- windbg符号表路劲设置成功后没有自动下载
- 为什么全局变量不好?
- UITableViewCell通过cell.backgroundColor设置背景颜色为什么没有效果
- 为什么Activity切换 设置overridePendingTransition 会没有效果
- 基于端口的虚拟主机的建立(终于晓得为什么没有成功的原因了)
- Stanford机器学习---第四讲. 神经网络的表示 Neural Networks representation
- 学期小结4:大二下学期
- “尚未在 Web 服务器上注册 ASP.NET 4.0” 问题
- 程序员求职之道(《程序员面试笔试宝典》)之企业面试笔试攻略(互联网)?
- Android进阶(三)-------PC和Android模拟器相互访问及模拟器之间tcp/udp通信
- 设置全局变量为什么没有成功!!!
- repeater 实现镶嵌和分页
- python 使用zbar解码二维码
- android ubuntu git 问题贴士
- 自定义任意快捷键,切换各种窗口
- DELL XPS15(L502x)win7下QuickSet引起按Caps Lock失焦问题解决办法
- 牛腩新闻发布系统总结
- MFC树形控件(CTreeCtrl)用法
- 编程珠玑_第二章_啊哈 算法