付笑 发表于 2013-12-9 17:30:04

静态类控件,创建后看不见

想创建一个静态控件,创静后看不见,窗口分析已经创建成功了,而且我只想创建一个,结果好像循环创建了很多个

请问是为什么啊


#include<windows.h>








LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE hInst;



int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
PSTR szCmdline,int iCmdShow)
{



static TCHAR szAppName[]=TEXT("Static");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;

hInst=hInstance;

wndclass.style =CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc =WndProc;
wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hInstance =hInstance;
wndclass.hIcon =::LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor =::LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground =(HBRUSH)::GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName =NULL;
wndclass.lpszClassName =szAppName;


if(!::RegisterClass(&wndclass))
{
::MessageBox(NULL,TEXT("Program requires Windows NT!"),
szAppName,MB_ICONERROR);
return 0;
}



hwnd=::CreateWindow(szAppName,
TEXT("Static"),
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL
);

//::ShowWindow(hwnd,iCmdShow);
::UpdateWindow(hwnd);


while(::GetMessage(&msg,NULL,0,0))

{
::TranslateMessage(&msg);
::DispatchMessage(&msg);

//msg.wParam=0;

}

return msg.wParam;




}



LRESULT CALLBACK WndProc(HWND hwnd ,UINT message,WPARAM wParam,LPARAM lParam)
{

static HWND hwndSmaller;
static int cxClient,cyClient,cxChar,cyChar;






switch(message)
{
case WM_CREATE:
{
cxChar=LOWORD(::GetDialogBaseUnits());
cyChar=HIWORD(::GetDialogBaseUnits());



hwndSmaller=::CreateWindow(TEXT("static"),TEXT("静态控件"),
WS_CHILD|WS_VISIBLE|SS_BLACKRECT,
0,0,100,100,
hwnd,(HMENU)1,hInst,NULL);




return 0;
}















case WM_DESTROY:
{
::PostQuitMessage(0);
return 0;
}

}

return ::DefWindowProc(hwnd,message,wParam,lParam);
}


浮砂 发表于 2013-12-9 17:30:05

static TCHAR szAppName[]=TEXT("Static");
注册窗口类的时候,类名添这个干啥。。。换个,
Static 这个是标签什么的类名。。。
换成 MyWindow 什么的都可以,别是系统已经注册过的。
再说了,Static 根本不是容器控件嘛。{:5_91:}

浮砂 发表于 2013-12-9 19:09:12

Ok, Look Here!

本帖最后由 浮砂 于 2013-12-9 19:11 编辑

这是你的代码,我帮你小小的更改了两处。
还有就是创建标签时去掉这个属性SS_BLACKRECT
不去掉的话,标签的字显示不出来 #include<windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE hInst;

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
PSTR szCmdline,int iCmdShow)
{
static TCHAR szAppName[]=TEXT("MyWindow");/*一个是这里,类名的问题*/
HWND hwnd;
MSG msg;
WNDCLASS wndclass;

hInst=hInstance;

wndclass.style =CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc =WndProc;
wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hInstance =hInstance;
wndclass.hIcon =::LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor =::LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground =(HBRUSH)::GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName =NULL;
wndclass.lpszClassName =szAppName;
if(!::RegisterClass(&wndclass))
{
::MessageBox(NULL,TEXT("Program requires Windows NT!"),
szAppName,MB_ICONERROR);
return 0;
}

hwnd=::CreateWindow(szAppName,
TEXT("Static"),
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL
);

//::ShowWindow(hwnd,iCmdShow);
::UpdateWindow(hwnd);
while(::GetMessage(&msg,NULL,0,0))

{
::TranslateMessage(&msg);
::DispatchMessage(&msg);

//msg.wParam=0;

}
return msg.wParam;
}



LRESULT CALLBACK WndProc(HWND hwnd ,UINT message,WPARAM wParam,LPARAM lParam)
{
static HWND hwndSmaller;
static int cxClient,cyClient,cxChar,cyChar;
switch(message)
{
case WM_CREATE:
{
cxChar=LOWORD(::GetDialogBaseUnits());
cyChar=HIWORD(::GetDialogBaseUnits());

hwndSmaller=::CreateWindow(TEXT("Static"),TEXT("静态控件"),
WS_CHILD|WS_VISIBLE,/*还有就是这里,SS_BLACKRECT,不去掉这个属性,标签上面的字显示不出来。*/
0,0,100,100,
hwnd,(HMENU)1,hInst,NULL);
return 0;
}

付笑 发表于 2013-12-9 23:07:49

浮砂 发表于 2013-12-9 19:09 static/image/common/back.gif
这是你的代码,我帮你小小的更改了两处。
还有就是创建标签时去掉这个属性SS_BLACKRECT
不去掉的话, ...

谢谢啊.............

付笑 发表于 2013-12-9 23:13:18

浮砂 发表于 2013-12-9 19:09 static/image/common/back.gif
这是你的代码,我帮你小小的更改了两处。
还有就是创建标签时去掉这个属性SS_BLACKRECT
不去掉的话, ...

还有想问下,标签上面的字怎么居中对齐啊,SS_CENTER只可以水平居中,垂直怎么居中啊

浮砂 发表于 2013-12-10 08:16:09

付笑 发表于 2013-12-9 23:13 static/image/common/back.gif
还有想问下,标签上面的字怎么居中对齐啊,SS_CENTER只可以水平居中,垂直怎么居中啊

有个方法哈, 就是把标签的大小调节的和文字的高度差不多。。。
我一般就是这么用的,,
不过垂直居中嘛,,,
CreateWindow的时候 加上这个属性   SS_CENTERIMAGE{:5_93:}

付笑 发表于 2013-12-10 08:32:53

浮砂 发表于 2013-12-10 08:16 static/image/common/back.gif
有个方法哈, 就是把标签的大小调节的和文字的高度差不多。。。
我一般就是这么用的,,
不过垂直居中嘛 ...

高手啊,谢谢啊

付笑 发表于 2013-12-10 08:37:40

浮砂 发表于 2013-12-10 08:16 static/image/common/back.gif
有个方法哈, 就是把标签的大小调节的和文字的高度差不多。。。
我一般就是这么用的,,
不过垂直居中嘛 ...

再问个问题啊,WM_CTLCOLORSTATIC这个消息前面三个字母是什么意思啊 "CTL",后面的能明白了,前面这三个看不懂什么意思

浮砂 发表于 2013-12-10 08:53:15

付笑 发表于 2013-12-10 08:37 static/image/common/back.gif
再问个问题啊,WM_CTLCOLORSTATIC这个消息前面三个字母是什么意思啊 "CTL",后面的能明白了,前面这三个 ...

CTL是英文ConTroL的缩写,有"控制的"意思。
这个消息可能就是控制Static 颜色把

付笑 发表于 2013-12-10 17:01:43

浮砂 发表于 2013-12-10 08:53 static/image/common/back.gif
CTL是英文ConTroL的缩写,有"控制的"意思。
这个消息可能就是控制Static 颜色把

谢谢了,我知道了
页: [1]
查看完整版本: 静态类控件,创建后看不见