首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

HI,All!来继续指导一下做任务栏解决思路

2012-03-04 
HI,All!来继续指导一下做任务栏我是一菜鸟原来的帖子中想要创建任务栏,已经找到了有CE界面调用任务栏的方

HI,All!来继续指导一下做任务栏
我是一菜鸟原来的帖子中想要创建任务栏,已经找到了有CE界面调用任务栏的方法。对于没CE界面的我在做简单的画一个任务栏的操作,

采用如下步骤:

1:设置DLG作为任务栏固定在屏幕底端(已完成)

C/C++ code
hDlgTaskBar = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_TASKDLG), g_hMain, TASKProc);MoveWindow(hDlgTaskBar, 0, cy-20, cx, 20, TRUE);ShowWindow(hDlgTaskBar, SW_SHOW);                                                                        CheckMenuItem(hMenu, IDM_TOOL_TASKBAR, MF_CHECKED);

2:在DLG上根据窗口数量创建BUTTON——关键(正在进行)
画BUTTON的做出来的效果


首先:不知道如何得到当前窗口的数量!(在做)
其次:如何相应BUTTON_DOWN来切换窗口!
C/C++ code
//定义了一个简单结构体struct {  HWND     g_hButton;  HMENU       ID_Button;  TCHAR    *Text_Button;} TASKBUTTON[50];//对TASKProc的响应BOOL CALLBACK TASKProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {        hDlgTaskBar = hWnd;    g_iWndCount = 0;  //记录窗口数量    int i;        switch (message)    {        case WM_COMMAND:        {        wmId    = LOWORD(wParam);         wmEvent = HIWORD(wParam);        switch (wmId)            case BN_CLICKED:             {                //?这里的i值如何得到,怎么给szSel赋值                TCHAR * szSel = TASKBUTTON[i].Text_Button;                HWND hSel = FindWindow(NULL, szSel);                BOOL y = SetForegroundWindow(hSel);                ShowWindow(hSel, SW_SHOW);            }            break;        }        break;        case WM_INITDIALOG:            if (GetParent(g_hMain) ==NULL)                       {                //??想要得到当前所有窗口数量和窗口的名称,可是却只得到了一个窗口的名称                    WINDOWINFO info;                memset(&info, 0, sizeof(WINDOWINFO));                GetWindowAttributes(g_hMain, info);                if (_tcscmp(info.szWindowText, _T("")) != NULL)                  {                    TASKBUTTON[g_iWndCount].Text_Button = info.szWindowText;                    g_iWndCount ++;                }                //设定button大小                int cx = GetSystemMetrics(SM_CXSCREEN) - 1;                  int cy = GetSystemMetrics(SM_CYSCREEN) - 1;                int wide = ((cx - 1) - g_iWndCount * 2) / g_iWndCount;                    int high = 20 - 1;                                    //创建各个Button                for (i = 0 ; i < g_iWndCount; i++)                {                    //??每个Button对应相应的ButtonProc事件                    TASKBUTTON[i].g_hButton = CreateWindow( TEXT("button"),TASKBUTTON[i].Text_Button , WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,                                                 i*wide + 2 , 1 , wide, high ,hDlgTaskBar, (HMENU)TASKBUTTON[i].ID_Button, g_hInst, NULL);                    ShowWindow(TASKBUTTON[i].g_hButton, SW_SHOW);                }            }            else            {                MessageBox(hWnd, _T("There is no programe here!"), _T("MioExplore"), MB_OKCANCEL| MB_ICONWARNING);            }            break;    }    return 0;}


希望有兴趣的朋友能帮忙指导一下,帮我完成窗口对应BUTTON和BUTTON响应的操作

我已经将现在难做的地方标注“??”

3:对BUTTON做相应的响应用来实现窗口的切换;

希望通过ShowWindow(hwnd, SW_SHOW);和ShowWindow(hwnd, SW_HIDE);完成切换


本人定“上门”拜谢!

[解决办法]
CE下进度查看,与PC下基本上是相同的,LZ可以去参考PC上相关的东东(网上可以search到一大把)
[解决办法]
CE下进度查看,与PC下基本上是相同的,LZ可以去参考PC上相关的东东(网上可以search到一大把)
[解决办法]

字体多了在button上没有显示完成,这个改了很久没成功呵呵,最后把显示内容改少点
探讨
问题:

1:使各个BUTTON响应不成功

2:字体拥挤不能在BUTTON上正常显示!

------解决方案--------------------


这个肯定可以,没研究过,不过对我们具体项目实际情况来说,帮助不大
[解决办法]
IsWindow
IsWindowEnable
IsWindowVisble
移动按钮简单的话MoveWindow就可以了, 但是可能效果不太好
最好是需要用按钮控件,直接在窗口上面画个表示按钮的框,以及文字,移动的时候只要改变对应坐标后刷新就可以了
[解决办法]
最好是需要用按钮控件,直接在窗口上面画个表示按钮的框,以及文字,移动的时候只要改变对应坐标后刷新就可以了
-->
最好是不要用按钮控件,直接在窗口上面画个表示按钮的框,以及文字,移动的时候只要改变对应坐标后刷新就可以了
[解决办法]
mark一下。。。等待更强大的人 出现。
[解决办法]
一直弄了好久就是说没弄好
[解决办法]
编程瓶颈~~~,无法及时跟踪窗口的变化,BUTTON大小正在设计中....

建议参考explorer的源代码,这个可能需要访问wince的内部数据结构,否则只能手动或者定时刷新
当然由你自己创建的窗口还可以可以维护的
explorer包含taskbar其实还蛮复杂的,用到不少com组件来和操作系统的其他部分进行交互

热点排行