鱼C论坛

 找回密码
 立即注册
查看: 2463|回复: 9

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

[复制链接]
发表于 2013-12-9 17:30:04 | 显示全部楼层 |阅读模式
1鱼币
想创建一个静态控件,创静后看不见,窗口分析已经创建成功了,而且我只想创建一个,结果好像循环创建了很多个

请问是为什么啊

#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);
}

最佳答案

查看完整内容

static TCHAR szAppName[]=TEXT("Static"); 注册窗口类的时候,类名添这个干啥。。。换个, Static 这个是标签什么的类名。。。 换成 MyWindow 什么的都可以,别是系统已经注册过的。 再说了,Static 根本不是容器控件嘛。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-9 17:30:05 | 显示全部楼层
static TCHAR szAppName[]=TEXT("Static");
注册窗口类的时候,类名添这个干啥。。。换个,
Static 这个是标签什么的类名。。。
换成 MyWindow 什么的都可以,别是系统已经注册过的。
再说了,Static 根本不是容器控件嘛。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-9 23:07:49 | 显示全部楼层

谢谢啊.............
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-9 23:13:18 | 显示全部楼层
浮砂 发表于 2013-12-9 19:09
这是你的代码,我帮你小小的更改了两处。
还有就是  创建标签时去掉这个属性  SS_BLACKRECT
不去掉的话, ...

还有想问下,标签上面的字怎么居中对齐啊,SS_CENTER只可以水平居中,垂直怎么居中啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-10 08:16:09 | 显示全部楼层
付笑 发表于 2013-12-9 23:13
还有想问下,标签上面的字怎么居中对齐啊,SS_CENTER只可以水平居中,垂直怎么居中啊

有个方法哈, 就是把标签的大小调节的和文字的高度差不多。。。
我一般就是这么用的,,
不过垂直居中嘛,,,
CreateWindow的时候 加上这个属性   SS_CENTERIMAGE
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-10 08:32:53 | 显示全部楼层
浮砂 发表于 2013-12-10 08:16
有个方法哈, 就是把标签的大小调节的和文字的高度差不多。。。
我一般就是这么用的,,
不过垂直居中嘛 ...

高手啊,谢谢啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-10 08:37:40 | 显示全部楼层
浮砂 发表于 2013-12-10 08:16
有个方法哈, 就是把标签的大小调节的和文字的高度差不多。。。
我一般就是这么用的,,
不过垂直居中嘛 ...

再问个问题啊,WM_CTLCOLORSTATIC  这个消息前面三个字母是什么意思啊 "CTL",后面的能明白了,前面这三个看不懂什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-10 08:53:15 | 显示全部楼层
付笑 发表于 2013-12-10 08:37
再问个问题啊,WM_CTLCOLORSTATIC  这个消息前面三个字母是什么意思啊 "CTL",后面的能明白了,前面这三个 ...

CTL是英文ConTroL的缩写,有"控制的"意思。
这个消息可能就是  控制Static 颜色  把
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-10 17:01:43 | 显示全部楼层
浮砂 发表于 2013-12-10 08:53
CTL是英文ConTroL的缩写,有"控制的"意思。
这个消息可能就是  控制Static 颜色  把

谢谢了,我知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 15:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表