Marco Baranna
04-26-2006, 10:28 PM
Olá! Estou fazendo uma biblioteca pra criação de skins de janelas usando C# e
preciso aplicar os estilos nas caixas de dialogo (OpenFileDialog, etc.).
Estou tentando fazer subclassing tratando a mensagem WM_ENTERIDLE no parent
form pra pegar o Handle delas, já que não é exposto no WinForms (pelo menos
não achei). O problema é que fico recebendo a notificação dessa mensagem
direto enquanto o DialogBox fica aberto. Estou confuso em como controlar a
primeira notificação pra criar minha classe que faz o subclassing. Estou
fazendo +/- assim, criei uma classe que extende System.Windows.Forms.Form e
nela faço o override do método WndProc.
[SecurityPermission(SecurityAction.LinkDemand, Flags =
SecurityPermissionFlag.UnmanagedCode)]
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case (int) NativeMethods.WindowMessages.WM_ENTERIDLE:
{
if (m.WParam.ToInt32() == NativeMethods.MSGF_DIALOGBOX)
{
// Aqui devo iniciar o subclassing do Dialog usando o
Handle (m.LParam)
}
break;
}
}
}
Alguém pode dar uma idéia de como eu poderia fazer isso? Não preciso de
código, só quero saber um "jeito bonito" de eu tratar essas mensagens. Pelo
que senti, seria melhor até tirar isso do Form pq estou processando outras
mensagens dentro dele (WM_NCCALCSIZE, WM_NCACTIVATE, etc.) e criar uma classe
separada que fizesse isso que poderia ser usada até pelo DialogBoxes.
Obrigado pela atenção!
preciso aplicar os estilos nas caixas de dialogo (OpenFileDialog, etc.).
Estou tentando fazer subclassing tratando a mensagem WM_ENTERIDLE no parent
form pra pegar o Handle delas, já que não é exposto no WinForms (pelo menos
não achei). O problema é que fico recebendo a notificação dessa mensagem
direto enquanto o DialogBox fica aberto. Estou confuso em como controlar a
primeira notificação pra criar minha classe que faz o subclassing. Estou
fazendo +/- assim, criei uma classe que extende System.Windows.Forms.Form e
nela faço o override do método WndProc.
[SecurityPermission(SecurityAction.LinkDemand, Flags =
SecurityPermissionFlag.UnmanagedCode)]
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case (int) NativeMethods.WindowMessages.WM_ENTERIDLE:
{
if (m.WParam.ToInt32() == NativeMethods.MSGF_DIALOGBOX)
{
// Aqui devo iniciar o subclassing do Dialog usando o
Handle (m.LParam)
}
break;
}
}
}
Alguém pode dar uma idéia de como eu poderia fazer isso? Não preciso de
código, só quero saber um "jeito bonito" de eu tratar essas mensagens. Pelo
que senti, seria melhor até tirar isso do Form pq estou processando outras
mensagens dentro dele (WM_NCCALCSIZE, WM_NCACTIVATE, etc.) e criar uma classe
separada que fizesse isso que poderia ser usada até pelo DialogBoxes.
Obrigado pela atenção!