hur.cn - 华软网

 热门搜索

WinMain里的WNDCLASS的窗口类名称为什么都用static修饰???

  作者:未知    来源:网络    更新时间:2011/9/30
如题:WinMain里的WNDCLASS的窗口类名称为什么都用static修饰???

windows程序设计的每个例子都是这样的

C++">
#include <windows.h>
 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT ("HelloWin") ;
     WNDCLASS     wndclass ;
     ……
     wndclass.lpszClassName = szAppName ;
     ……

main里边的这个szAppName[] 就算不加static,也是与main函数同生存时间的
这地方又必要吗?为什么要这样写?
---华软 网友回答---
也可以不加static
---华软网友回复---
VS2010里边使用的是全局的
---华软网友回复---
因为 WNDCLASS::lpszClassName 是一个指针
---华软网友回复---
不加其实也是可以的,我觉得只是一种习惯。
---华软网友回复---
引用 4 楼 wltg2001 的回复:
不加其实也是可以的,我觉得只是一种习惯。


就是这样
---华软网友回复---
现在看来加不加static 不应影响代码的实现,但使用static依赖性更小。
因为szAppName 需要放在静态存储区,程序运行期间经常要用(动态分配内存当然也可以),
使用static 关键字显式指定要存在静态存储区,而字符串常量则不然,是约定或者是特性。
貌似两者的差别比较模糊了。
---华软网友回复---
static的是预先放于内存中静态存储区访问的

而VS2010后来就是全局函数了

差别并不明显,用和不用都可以的
---华软网友回复---
你分别将
int x=0,y=0;
POINT pt[2]={x,y,x+20,y+20};
前加上static试试运行,按上下键观察斜线能否运动.
#include<Windows.h>
LRESULT CALLBACK Proc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine ,INT nCmdShow)
{
    WNDCLASS wndclass;
    MSG msg;
    HWND hwnd;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.lpfnWndProc= Proc;
wndclass.lpszClassName="Move";
wndclass.lpszMenuName=NULL;
wndclass.style=NULL;
RegisterClass(&wndclass);
hwnd=CreateWindow ("Move","UP&DOWN",WS_OVERLAPPEDWINDOW,300,200,800,600,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,nCmdShow);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK Proc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
   int x=0,y=0;
   POINT pt[2]={x,y,x+20,y+20};
    HDC hdc;
    PAINTSTRUCT ps;
switch(msg)
{
        case WM_KEYDOWN:
            switch(wParam)
            {
                case VK_DOWN:
                    y+=10;
                    break;
case VK_UP:
y-=10;
break;
}
InvalidateRect(hwnd,NULL,TRUE);
break;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
Polyline(hdc,pt,2);
EndPaint(hwnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd,msg,wParam,lParam);
}
                
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。