【问题标题】:When I disable and enable my window, borders disappear当我禁用和启用我的窗口时,边框消失
【发布时间】:2021-08-26 17:39:59
【问题描述】:

当我禁用并重新启用AddControl 中的窗口时,窗口中的WS_BORDER 样式会消失。为什么?包含在“nuova prenotazione”中切换边界的程序的image 的链接

窗口过程中的案例:

case CERCA_UT_RI:
                {
                    MessageBeep(MB_RIGHT);
                    //mostra varie message box in base all output, se ritorna 1 vuol dire che ha trovato l'utente ricercato
                    if(Cerca_utM(HricercaMain)==1){
                        //mettiamo la ricerca nella variabile globale così da passarla alle altre funzioni
                        GetWindowText(HricercaMain, ricerca, 20);
                        //Riattiva tutte le finestre
                        EnableAllWindow(hWnd);      
                    }
                } 
                break;

窗口过程的控件:

void AddControls(HWND hWnd)//dichiariamo la nostra addcontrol e processeremo ovviamente wm_create ove si crea la finestra
{
    //-------------------------------------UTENTE----------------------------------------------------------------------------
    HWinRicerca = CreateWindowW(L"static",L"Ricerca Utente",WS_VISIBLE | WS_CHILD | WS_BORDER | SS_CENTER|WS_THICKFRAME,350,40,250,135,hWnd,NULL,NULL,NULL);
    CreateWindowW(L"static",L"Nome :",WS_VISIBLE | WS_CHILD | WS_BORDER | SS_CENTER,30,35,50,20,HWinRicerca,NULL,NULL,NULL);
    HricercaMain = CreateWindowW(L"edit", NULL,  WS_VISIBLE | WS_CHILD | WS_BORDER | ES_AUTOVSCROLL,80,35,130,20,HWinRicerca,NULL,NULL,NULL);
    CreateWindowW(L"Button",L"Conferma",WS_VISIBLE | WS_CHILD ,435,115,70,40,hWnd,(HMENU)CERCA_UT_RI,NULL,NULL);
    //------------------------------------------------------------------------------------------------------------------------

    //--------------------------------Prenotazione--------------------------------------------------
    hPreMain = CreateWindowW(L"static",L"Nuova Prenotazione",WS_DISABLED |WS_VISIBLE | WS_CHILD | WS_BORDER | SS_CENTER|WS_THICKFRAME,100,225,280,220,hWnd,NULL,NULL,NULL);
    hTBid = CreateWindowW(L"static",L"id Rist :",WS_VISIBLE |WS_DISABLED | WS_CHILD | WS_BORDER | SS_CENTER|ES_NUMBER,160,260,60,20,hWnd,NULL,NULL,NULL);
    HPreid = CreateWindowW(L"edit", NULL, WS_DISABLED | WS_VISIBLE | WS_CHILD | WS_BORDER | ES_AUTOVSCROLL|ES_NUMBER,220,260,60,20,hWnd,NULL,NULL,NULL);
    hTBpre = CreateWindowW(L"static",L"Data Prenotazione :",WS_DISABLED |WS_VISIBLE | WS_CHILD |ES_NUMBER,160,300,130,20,hWnd,NULL,NULL,NULL);
    HPreGio = CreateWindowW(L"edit", L"g",WS_DISABLED |WS_CHILD | WS_VISIBLE | ES_NUMBER| WS_BORDER,160,330,30,20,hWnd,NULL,NULL,NULL);
    HPreMese = CreateWindowW(L"edit", L"m",WS_DISABLED | WS_BORDER |WS_VISIBLE | WS_CHILD  | ES_AUTOVSCROLL|ES_NUMBER,205,330,30,20,hWnd,NULL,NULL,NULL);
    HPreAnno = CreateWindowW(L"edit", L"y",WS_DISABLED | WS_VISIBLE | WS_CHILD  | ES_AUTOVSCROLL|ES_NUMBER| WS_BORDER,250,330,40,20,hWnd,NULL,NULL,NULL);
    hbutton = CreateWindowW(L"Button",L"Conferma",WS_DISABLED |WS_VISIBLE | WS_CHILD,190,380,70,40,hWnd,(HMENU)PRE_NUOVO,NULL,NULL);
    //---------------------------------------------------------------------------------------------

    //limitiamo il massimo degli input inseribili nelle edit box di giorno/mese
    const int maximum_length = 2;
    SendMessage(HPreGio, EM_SETLIMITTEXT, maximum_length, 0);
    SendMessage(HPreMese, EM_SETLIMITTEXT, maximum_length, 0);
}

以及启用所有窗口程序:

void EnableAllWindow(HWND hWnd)
{
    EnableWindow(hPreMain, true);
    EnableWindow(hbutton, true);
    EnableWindow(HPreGio, true);
    EnableWindow(HPreMese, true);
    EnableWindow(HPreAnno, true);
    EnableWindow(HPreid, true);
    EnableWindow(hTBid, true);
    EnableWindow(hTBpre, true);
}

【问题讨论】:

  • 没有函数EnableAllWindow,所以必须是自定义代码。也许你应该证明这一点。
  • 您的变量是(原始?)意大利语和英语的混合体。例如,我猜HricercaMainHresearchMain 相同。如果没有适当的最小示例,我们无法知道您的问题是什么。
  • 如果您希望它们开始禁用,为什么不使用WS_DISABLED
  • 您使用的是“视觉风格”吗?这将有意删除边框并使控件看起来“扁平”。
  • 对不起,我想把它们都翻译成英文

标签: c winapi


【解决方案1】:

我测试了代码,能够重现问题,但我认为是静态控件重绘造成的。

您可以尝试不启用hPreMain窗口,它会正常工作:

你也可以尝试修改窗口的坐标来判断是不是问题造成的:

当您启用窗口时,它会在主窗口上重绘并覆盖边框。我认为你的hPreMain 窗口不应该使用static 控件,而是一个自定义窗口,它可以正常工作:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 2017-03-25
    • 2015-06-03
    • 2015-06-04
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    相关资源
    最近更新 更多