3122|6

57

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助:建立一个窗口 并建三个按钮 为什么按钮不显示? [复制链接]

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
{
        static TCHAR szAppName[]=TEXT("test");
        HWND hwnd;
        MSG msg;
        WNDCLASS wndcls;
        wndcls.style=CS_HREDRAW|CS_VREDRAW;
        wndcls.lpfnWndProc=TestProc;
        wndcls.cbClsExtra=0;
        wndcls.cbWndExtra=0;
        wndcls.hInstance=hInstance;
        wndcls.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_APPLICATION));
        wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);
        wndcls.hbrBackground=(HBRUSH)GetStockObject((WHITE_BRUSH));
        wndcls.lpszMenuName=NULL;
        wndcls.lpszClassName=szAppName;

        if(!RegisterClass(&wndcls))
        {
                MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
                return 0;
        }

        hwnd=CreateWindow (szAppName, TEXT ("Test"),WS_OVERLAPPED,
                       0, 0,600, 600,NULL, NULL, hInstance, NULL) ;

        ShowWindow (hwnd, nCmdShow) ;
        UpdateWindow (hwnd) ;
        while (GetMessage (&msg, NULL, 0, 0))
        {
                TranslateMessage (&msg) ;
                DispatchMessage (&msg) ;
        }
        return msg.wParam ;
}

LRESULT CALLBACK TestProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
        int wmId, wmEvent;
        PAINTSTRUCT ps;
        HDC hdc;

        static int cxChar,cyChar;
        HWND btnhwnd1,btnhwnd2,btnhwnd3;

        switch(uMsg)
        {
        case WM_CREATE:
                SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)LoadIcon(hInstance,(LPCTSTR)IDI_APPLICATION));
                cxChar=LOWORD(GetDialogBaseUnits());
                cyChar=HIWORD(GetDialogBaseUnits());
                btnhwnd1=CreateWindow(TEXT("button"),TEXT("OK"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,600-cyChar,20*cxChar,cyChar,hwnd,
                        HMENU(0),((LPCREATESTRUCT)lParam)->hInstance,NULL);
                btnhwnd2=CreateWindow(TEXT("button"),TEXT("CLEAR"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,600-cyChar,200+20*cxChar,cyChar,hwnd,
                        HMENU(1),((LPCREATESTRUCT)lParam)->hInstance,NULL);
                btnhwnd1=CreateWindow(TEXT("button"),TEXT("CANCEL"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,600-cyChar,400+20*cxChar,cyChar,hwnd,
                        HMENU(2),((LPCREATESTRUCT)lParam)->hInstance,NULL);
                break;
        case WM_PAINT:
                hdc = BeginPaint(hwnd, &ps);

                // TODO: 在此添加任意绘图代码...

                EndPaint(hwnd, &ps);
                break;
        case WM_DESTROY:
                PostQuitMessage(0);
                break;


        default:
                return DefWindowProc(hwnd, uMsg, wParam, lParam);
        }
        return 0;
}

运行后窗口显示出来 为什么按钮不显示呢?
还有 wndcls.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_APPLICATION));  这里wince系统 不支持IDI_APPLICATION
怎么解决呢  

最新回复

不好意思 才结贴 说到重点上了哦 为什么这个参数影响这么大 能解释下吗  详情 回复 发表于 2010-4-16 13:59
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
按钮的位置不对,你有两个变量没有初始化cychar,cxchar.
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 baili35 的回复:
按钮的位置不对,你有两个变量没有初始化cychar,cxchar.


位置应该放哪呢? 初用win32 不太明白啊
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HANDLE hInstance,
PVOID lpParam
);
x,y,nWidth,nHeight指定好了就出现了.你的cychar,和cxchar没有值,要不你就指定位置就成了.
 
 
 

回复

94

帖子

0

TA的资源

一粒金砂(初级)

5
 
试一下ShowWindow(SW_SHOW)函数看行不行
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

6
 
问题解决了
hwnd=CreateWindow (szAppName, TEXT ("Test"),WS_OVERLAPPED,
  0, 0,600, 600,NULL, NULL, hInstance, NULL) ;
把参数 ws_overlapped去了就行了 换为WS_VISIBLE

另外还想问下  我想把这个窗口总是在最顶层 怎么设置呢
SetWindowPos(hwnd,HWND_TOPMOST,0,0,600,600,SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE);这样设置不管用的呢
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 4 楼 domworldjohn 的回复:
试一下ShowWindow(SW_SHOW)函数看行不行


不好意思 才结贴
说到重点上了哦 为什么这个参数影响这么大 能解释下吗
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表