Anpassa vanliga dialogrutor
Du kan använda de vanliga dialogrutorna i deras standardformulär, eller så kan du anpassa dem. Ur användarens perspektiv är den främsta fördelen med den gemensamma dialogrutan dess konsekventa utseende och funktioner från program till program. Därför är det viktigt att du bara anpassar en gemensam dialogruta när det är absolut nödvändigt för ett program. Annars går det konsekventa utseendet och det enkla kodningsgränssnittet förlorade. Lämpliga anpassningar lämnar intakta så många av de ursprungliga kontrollerna som möjligt. Att öka storleken på dialogrutan eller lägga till nya kontroller i det utrymme som redan är tillgängligt i dialogrutan är en lämplig anpassning. Att dölja ursprungliga kontroller eller på annat sätt ändra de avsedda funktionerna i de ursprungliga kontrollerna är en mindre lämplig anpassning.
I det här avsnittet beskrivs följande metoder för att anpassa en gemensam dialogruta:
- anpassade mallar
- Hook-procedurer för vanliga dialogrutor
- vanliga dialogmeddelanden
- Hjälp till med support
Anpassade mallar
Vanliga dialogrutor har standardmallar som definierar antalet, typen och positionen för standardkontrollerna i dialogrutan. Du kan definiera en anpassad mall för att ge användarna åtkomst till ytterligare kontroller som är unika för ditt program.
För alla vanliga dialogrutor utom explorer-stil Öppna och Dialogrutan Spara som ändrar du standardmallen för att skapa en anpassad mall som ersätter standardmallen. Den anpassade mallen definierar typen och positionen för standardkontrollerna samt eventuella ytterligare kontroller.
När du skapar en anpassad dialogrutemall genom att ändra standarddialogrutamallen kontrollerar du att identifierarna för eventuella tillagda kontroller är unika och inte står i konflikt med standardkontrollernas identifierare. I följande tabell visas namnet på standardmallfilen och inkludera filen för var och en av de vanliga dialogrutetyperna.
Typ av dialogruta | Mallfil | Inkludera fil |
---|---|---|
färg | Color.dlg | ColorDlg.h |
Hitta | Findtext.dlg | Dlgs.h |
teckensnitt | Font.dlg | Dlgs.h |
Öppna (flera val) | Fileopen.dlg | Dlgs.h |
Öppna (enkel markering) | Fileopen.dlg | Dlgs.h |
Utskriftsformat | Prnsetup.dlg | Dlgs.h |
Skriv ut | Prnsetup.dlg | Dlgs.h |
Utskriftsinstallation (föråldrad) | Prnsetup.dlg | Dlgs.h |
Ersätt | Söktext.dlg | Dlgs.h |
Om du vill aktivera en anpassad mall måste du ange en flagga i medlemmen av Flaggor i motsvarande struktur för dialogrutan. Om mallen är en resurs i ett program- eller dynamiskt länkbibliotek anger du flaggan ENABLETEMPLATE i Flags-medlemmen och använder hInstance och lpTemplateName medlemmar i strukturen för att identifiera modulen och resursnamnet. Om mallen redan finns i minnet, ange flaggan ENABLETEMPLATEHANDLE i Flags-medlemmen och använd hInstance-medlemmen för att identifiera minnesobjektet som innehåller mallen.
I de flesta fall måste du också aktivera en krokprocedur för dialogrutan för att stödja och bearbeta indata för de ytterligare kontrollerna i din anpassade mall.
För Explorer-stil dialogrutorna Öppna och Spara som är standardmallarna inte tillgängliga för ändring. I stället definierar din anpassade mall en underordnad dialogruta som endast innehåller de objekt som ska läggas till i standarddialogrutan. Den anpassade mallen kan också definiera en statisk kontroll som anger platsen för klustret med standardkontroller i den underordnade dialogrutan. Mer information finns i Explorer-Style anpassade mallar.
Krokprocedurer för vanliga dialogrutor
För var och en av de vanliga dialogrutorna kan du aktivera en krokprocedur för att bearbeta meddelanden från standarddialogrutan. Det finns två allmänna typer av vanliga dialogkrokprocedurer:
- Standardhookproceduren som används med de vanligaste dialogrutorna
- Hook-proceduren i Explorer-format som stöds av dialogrutorna Öppna och Spara som
När du anger en standardruteprocedur för en av de vanliga dialogrutorna hanterar standarddialogrutan dess meddelanden på följande sätt.
Meddelande | Hantering |
---|---|
WM_INITDIALOG | Standarddialogrutan bearbetar meddelandet innan det skickas till krokproceduren. Meddelandets lParam parametern är en pekare till initieringsstrukturen som angavs när dialogrutan skapades. |
Alla andra meddelanden | Hook-proceduren tar emot meddelandet först. Returvärdet för krokproceduren avgör sedan om standarddialogrutan bearbetar meddelandet eller ignorerar det. |
För dialogrutorna i Explorer-stilen Öppna och Spara som, tar "hook"-proceduren inte emot meddelanden avsedda för de vanliga kontrollerna i dialogrutan. I stället tar den emot meddelanden från dialogrutan och meddelanden för eventuella ytterligare kontroller som du har definierat i en anpassad mall. Mer information finns i Explorer-Style Hook Procedures.
Om du vill aktivera en hook-procedur, ange ett ENABLEHOOK-värde i fältet Flags i motsvarande struktur för dialogrutan. Om en ENABLEHOOK- flagga är satt, måste en lpfnHook medlem i strukturen ange adressen för krokproceduren.
I följande tabell visas typen av krokprocedur för varje av de vanliga dialogrutorna.
Typ av dialogruta | Krokprocedur |
---|---|
färg | CCHookProc |
Hitta eller Ersätt | FRHookProc |
teckensnitt | CFHookProc |
Öppna eller Spara som (Explorer-format) | OFNHookProc |
Öppna eller Spara som (gammal stil) | OFNHookProcOldStyle |
Skriv ut | PrintHookProc |
Sidinställningar | PageSetupHook |
För dialogrutan utskriftskonfiguration kan du även ange en PagePaintHook hook-procedur. Det här är en speciell hook-procedur som du kan använda för att anpassa utseendet på exempelsidan som visas i dialogrutan Sidinställningar.
Anteckning
Dialogrutan Utskriftsinställning har ersatts av dialogrutan Sidinställning. Applikationer bör använda dialogrutan Sidinställningar. För kompatibilitet fortsätter dock funktionen PrintDlg att stödja visning av dialogrutan Utskriftskonfiguration. Du kan ange en SetupHookProc hook-procedur för dialogrutan Utskriftskonfiguration.
Vanliga dialogmeddelanden
Vanliga dialogrutor använder meddelanden för att meddela fönsterproceduren eller krokproceduren när vissa händelser inträffar. Dessutom finns det meddelanden som du kan skicka till en gemensam dialogruta för att hämta information eller för att kontrollera beteendet eller utseendet i dialogrutan. I det här avsnittet beskrivs vanliga dialogrutor som registrerats av RegisterWindowMessage-funktionen, meddelanden som används av dialogrutorna Teckensnitt och Sidlayout samt de som används av Explorer-stilens dialogrutor Öppna och Spara som.
Det gemensamma dialogrutebiblioteket definierar en uppsättning meddelandesträngar. Du kan skicka en konstant som är associerad med en av dessa meddelandesträngar till RegisterWindowMessage för att hämta en meddelandeidentifierare. Du kan sedan använda identifieraren för att identifiera och bearbeta meddelanden som skickas från en gemensam dialogruta eller för att skicka meddelanden till en gemensam dialogruta. I följande tabell visas meddelandekonstanterna och hur de används.
Kontakter | Använd |
---|---|
COLOROKSTRING | En dialogruta Color skickar det här meddelandet till krokproceduren när användaren väljer en färg och klickar på knappen OK. Krokproceduren kan acceptera färgen eller avvisa den och tvinga dialogrutan att förbli öppen. |
FILEOKSTRING | En dialogruta för öppna eller spara som skickar det här meddelandet till hook-proceduren när användaren väljer ett filnamn och trycker på knappen OK. Hook-proceduren kan acceptera filnamnet eller avvisa det och tvinga dialogrutan att förbli öppen. För dialogrutor i Explorer-stil Öppna och Spara som har det här meddelandet ersatts av CDN_FILEOK meddelandemeddelande. |
FINDMSGSTRING | En dialogruta för Sök eller Ersätt skickar det här meddelandet till det överordnade fönstrets fönsterprocedur när användaren klickar på Sök nästa, Ersätt, Ersätt alla, eller stänger dialogrutan. Meddelandets parameter lParam är en pekare till en FINDREPLACE- struktur som innehåller användarens indata. |
HELPMSGSTRING | Alla vanliga dialogrutor skickar det här meddelandet till fönsterproceduren i det överordnade fönstret när användaren klickar på knappen Hjälp. För dialogrutor i Explorer-stil Öppna och Spara som har det här meddelandet ersatts av CDN_HELP meddelandemeddelandet. |
LBSELCHSTRING | En dialogruta för Öppna eller Spara som skickar detta meddelande till ankretningsproceduren när användaren ändrar valet i listrutan för Filnamn. För dialogrutor i Explorer-stil Öppna och Spara som har det här meddelandet ersatts av CDN_SELCHANGE meddelandemeddelandet. |
SETRGBSTRING | En krokprocedur kan skicka det här meddelandet till dialogrutan Color för att ange den aktuella färgmarkeringen. |
SHAREVISTRING | En dialogruta 'Öppna' eller 'Spara som' skickar det här meddelandet till hook-rutinen om ett delningsfel inträffar för den valda filen när användaren klickar på knappen OK. För dialogrutor i Explorer-stil Öppna och Spara som har det här meddelandet ersatts av CDN_SHAREVIOLATION meddelandemeddelande. |
Några vanliga dialogrutor skickar och tar emot andra fönstermeddelanden. Krokproceduren för dialogrutan Teckensnitt kan skicka något av WM_CHOOSEFONT_* meddelanden till dialogrutan Teckensnitt. Mer information finns i dialogrutan Teckensnitt. Dialogrutan Utskriftskonfiguration skickar WM_PSD_* meddelanden om du har aktiverat en PagePaintHook hook-procedur. Mer information finns i dialogrutan för utskriftsformat .
Dialogrutorna av Explorer-typ Öppna och Spara som stöder en uppsättning fördefinierade meddelanden. Dessa inkluderar meddelanden som skickas i form av ett WM_NOTIFY meddelande till din krokprocedur och meddelanden som krokproceduren kan skicka till dialogrutan. En fullständig lista över dessa meddelanden finns i Explorer-Style Hook Procedures.
Hjälpsupport
Vanliga dialogrutor ger sammanhangsberoende hjälp för standardkontrollerna i dialogrutan. Om du vill ge ytterligare hjälp för en gemensam dialogruta kan du visa en Hjälp-knappen och bearbeta meddelanden som genereras när användaren klickar på knappen. Knappen Hjälp är ett tillägg till standardkontextkänslig hjälp. Knappen Hjälp är användbar för att beskriva det allmänna syftet med dialogrutan som den gäller för ditt program.
Context-Sensitive Hjälp
Alla vanliga dialogrutor ger sammanhangsberoende hjälp för standardkontrollerna i dialogrutan. Användaren kan visa hjälp för enskilda kontroller med någon av följande metoder:
- Välj kontrollen och tryck på F1-tangenten.
- Klicka på ? i namnlisten och klickar sedan på en kontroll.
- Högerklicka på en kontroll.
Om du anpassar en dialogruta genom att lägga till nya kontroller måste du också utöka hjälpstödet för dessa kontroller genom att bearbeta begäranden om hjälp i krokproceduren. Hook-proceduren tar emot följande meddelanden när användaren begär hjälp.
Användaråtgärd | Meddelande |
---|---|
Högerklicka på en kontroll. | WM_CONTEXTMENU |
Tryckte på F1-tangenten. | WM_HELP |
Klickade på ? knappen i namnlisten och klickade sedan på en kontroll. | WM_HELP |
Du bör bearbeta dessa meddelanden för de kontroller som du har lagt till, men låt standarddialogrutan bearbeta meddelandena för standardkontrollerna. Mer information om hur du bearbetar dessa meddelanden finns i Hjälp.
Hjälpknappen
Du kan visa knappen Hjälp i vilken som helst av de vanliga dialogrutorna genom att ange värdet SHOWHELP i medlemen Flags för initialiseringsstrukturen för dialogrutan. Om du visar knappen Hjälp måste du bearbeta användarens begäran om hjälp. Bearbetningen kan utföras antingen i någon av programmets fönsterprocedurer eller i en krokprocedur för dialogrutan. Vanligtvis bearbetar du begäran om hjälp genom att anropa funktionen WinHelp.
Om du vill bearbeta hjälpmeddelanden i någon av dina fönsterprocedurer måste du hämta en meddelandeidentifierare för strängen som definierats av värdet HELPMSGSTRING och identifiera fönstret för att ta emot meddelanden. Om du vill hämta meddelandeidentifieraren anger du HELPMSGSTRING- som parameter i ett anrop till funktionen RegisterWindowMessage. När du skapar dialogrutan använder du hwndOwner medlem i dialogrutans initieringsstruktur för att identifiera det fönster som ska ta emot meddelandena. Dialogruteproceduren skickar meddelandet till fönsterproceduren när användaren klickar på knappen Hjälp.
Om du vill bearbeta hjälpmeddelanden i en hook-procedur bör du bearbeta WM_COMMAND meddelandet. Hook-proceduren ger hjälp om parametern wParam i det här meddelandet anger att användaren klickade på knappen Hjälp. Identifieraren för knappen Hjälp är pshHelp konstant som definierats i filen Dlgs.h.
Hook-procedurer för dialogrutorna Öppna och Spara som tar inte emot meddelanden för WM_COMMAND från Hjälp-knappen . I stället skickar dialogrutan ett CDN_HELP meddelandemeddelande till krokproceduren när knappen Hjälp klickas.