请问这段代码为什么nChar++没有显现作用呢

时间:2022-09-11 13:54:23
#include"windows.h"
#include"stdlib.h"
#include"string.h"

long WINAPI WndProc(HWND hWnd,UINT iMessage, UINT wParam,LONG lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);
HWND hWndMain;

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{MSG Message;
if(!InitWindowsClass( hInstance))
return FALSE;
if(!InitWindows( hInstance, nCmdShow))
return FALSE;

while(GetMessage(&Message,NULL,0,0))
{TranslateMessage(&Message);
DispatchMessage(&Message);}
return Message.wParam;}
long WINAPI WndProc(HWND hWnd,UINT iMessage, UINT wParam,LONG lParam)
{HDC hDC;
HFONT hf;
PAINTSTRUCT Ptstr;
TEXTMETRIC tm;
char Char[]="abcdefghijklmnopqrstuvwxyz";
int nChar=1,Y=0,X=0,nCharlen=26;
bool bRight=TRUE,bLeft=FALSE,bItalic=TRUE;
int i=0;
switch(iMessage)
{
case WM_PAINT:
hDC=BeginPaint(hWnd,&Ptstr);
GetTextMetrics(hDC,&tm);    
Y=tm.tmExternalLeading+10;
for( i=0;i<nChar;i++)
{SetTextColor(hDC,RGB(0,0,0));
X=X+tm.tmAveCharWidth*2;
TextOut(hDC,X,Y,&Char[i],1);}
SetTextColor(hDC,RGB(255,0,0));
X=X+tm.tmAveCharWidth*2;
Y=tm.tmExternalLeading;
TextOut(hDC,X,Y,&Char[nChar],1);
Y=tm.tmExternalLeading+10;
for(i=nChar+1;i<nCharlen;i++)
{SetTextColor(hDC,RGB(0,255,0));
X=X+tm.tmAveCharWidth*2;
TextOut(hDC,X,Y,&Char[i],1);}
if(nChar==nCharlen)
{bRight=FALSE;
bLeft=TRUE;}
else if(nChar==0)
{bRight=TRUE;
bLeft=FALSE;}
if(bRight)
nChar++;
else
nChar--;
hf=CreateFont(40,
  0,0,
  0,0,bItalic,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"斜体");
SelectObject(hDC,hf);
X=tm.tmAveCharWidth*2;
Y=100+tm.tmExternalLeading*2;
if(bItalic==TRUE)
SetTextColor(hDC,RGB(0,0,0));
else
SetTextColor(hDC,RGB(0,255,255));
TextOut(hDC,X,Y,Char,strlen(Char));
if(bItalic==TRUE)
bItalic=FALSE;
else
bItalic=TRUE;
DeleteObject(hf);
EndPaint(hWnd,&Ptstr);
Sleep(100);

InvalidateRect(hWnd,NULL,1);

return 0;
break;
case WM_DESTROY:

PostQuitMessage(0);
return 0;
break;
default:
return DefWindowProc(hWnd,iMessage,wParam,lParam);
break;}
return 0;}

BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)
{HWND hWnd;
hWnd=CreateWindow("SIN",                           
  "字体",
  WS_OVERLAPPEDWINDOW,
0,
0,
CW_USEDEFAULT,
                    CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);

if(!hWnd)
   return FALSE;
hWndMain=hWnd;
ShowWindow( hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;}
BOOL InitWindowsClass(HINSTANCE hInstance)
{WNDCLASS WndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,"END");
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName="SIN";
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW|CS_VREDRAW;
return RegisterClass(&WndClass);
}
这是一个WIN32程序,
这段代码可以通过编译但是
if(bRight)
nChar++;
else
nChar--;
好像没有起到任何作用,因为没有实现预期的动态显示结果!!求高人指点,不胜感激!
                       

7 个解决方案

#1


int nChar=1,Y=0,X=0,nCharlen=26;
-->
static int nChar = 1;
int Y=0,X=0,nCharlen=26;

#2


这格式,连个颜色也不给标。。

不过我还是找到了
nchar在函数中式个局部变量,每次都会被初始化,所以就每次结果都一样
可以试试把nchar设置成全局变量或者static

#3


不好意思哈,太感谢了,这个问题困扰了我好几天了,原来是自己C语言美学好!

#4


引用 2 楼 mayudong1 的回复:
这格式,连个颜色也不给标。。

不过我还是找到了
nchar在函数中式个局部变量,每次都会被初始化,所以就每次结果都一样
可以试试把nchar设置成全局变量或者static


对的,要注意局部变量和全局变量的区别

#5


谢谢哈

#6


我还有一个问题就是什么时候应该用局部变量?因为一般都是用的全局变量

#7


局部变量的生存期在 { } 之间,出了这个大括号局部变量就不存在了,只能临时使用;而全局变量生存期和程序一样长,可长期使用

#1


int nChar=1,Y=0,X=0,nCharlen=26;
-->
static int nChar = 1;
int Y=0,X=0,nCharlen=26;

#2


这格式,连个颜色也不给标。。

不过我还是找到了
nchar在函数中式个局部变量,每次都会被初始化,所以就每次结果都一样
可以试试把nchar设置成全局变量或者static

#3


不好意思哈,太感谢了,这个问题困扰了我好几天了,原来是自己C语言美学好!

#4


引用 2 楼 mayudong1 的回复:
这格式,连个颜色也不给标。。

不过我还是找到了
nchar在函数中式个局部变量,每次都会被初始化,所以就每次结果都一样
可以试试把nchar设置成全局变量或者static


对的,要注意局部变量和全局变量的区别

#5


谢谢哈

#6


我还有一个问题就是什么时候应该用局部变量?因为一般都是用的全局变量

#7


局部变量的生存期在 { } 之间,出了这个大括号局部变量就不存在了,只能临时使用;而全局变量生存期和程序一样长,可长期使用