Caixas de Mensagens
Um "Hello, World" Conceituado
Vamos programar um pouco. Neste momento é importante, se ainda não o fez, que você instale o Visual Studio Community.
Abra o Visual Studio e crie um novo projeto do tipo Console App, conforme a imagem abaixo mostra:

Nomeie o projeto como "Mensagem" (sem aspas) e após criá-lo, substitua o conteúdo do arquivo Mensagem.cpp que o Visual Studio criará automaticamente por este:
#include <Windows.h>
int main() {
MessageBox(nullptr,
L"Estou estudando a Windows API\n\nGostei disso! :)",
L"Mente Binária",
MB_OK | MB_ICONINFORMATION);
}
Tecle F5
para rodar o programa e você deve ver uma janela como esta:

Há vários conceitos neste código. Vamos dedicar um tempo a eles. Acompanhe:
Na linha 1, como o Windows utiliza sistemas de arquivos que não são sensíveis ao caso, ou seja, não diferenciam letras maiúsculas de minúsculas, tanto faz escrever
Windows.h
,windows.h
,WINDOWS.H
ou mesmoWiNdOwS.H
. Vai funcionar.Na linha 4 chamei a função
MessageBox
, mas ela na verdade não existe: é uma macro que será substituída pelo pré-processador pelas funçõesMessageBoxW
(mais comum) ouMessageBoxA
(caso a macroUNICODE
não esteja definida).Ainda na linha 4 introduzi um conceito novo, de
nullptr
ao invés deNULL
, aproveitando que o compilador utilizado é de C++. Acho melhor de digitar.Nas linhas 5 e 6 (sim, não há o menor problema em colocar os outros parâmetros da função em outras linhas para facilitar a leitura) eu passo para a função o texto e o título, respectivamente. Impossível não notar o
L
colado com as aspas duplas que abrem uma string em C não é mesmo? Ele serve para transformar a string subsequente em uma wide string (Unicode), que já estudamos. EsteL
é necessário porque a funçãoMessageBox
vai expandir, por padrão, para aMessageBoxW
(perceba oW
no final) que é a versão daMessageBox
que trabalha com strings Unicode. Também usamos o caractere de nova linha duas vezes para dividir a mensagem em três linhas, sendo a segunda uma linha vazia.Na linha 7 eu utilizo uma combinação de duas flags:
MB_OK
eMB_ICONINFORMATION
. Esta última configura este ícone de um "i" numa bolinha azul.
Lendo o Retorno da Função
Agora vamos criar um programa um pouco maior afim de estudar mais conceitos da API do Windows. Compila aí:
#include <Windows.h>
int main() {
LPCWSTR titulo = L"Mente Binária";
int ret = MessageBox(nullptr,
L"Você já se registrou em https://menteb.in?",
titulo,
MB_YESNO | MB_ICONQUESTION);
if (ret == IDYES) {
MessageBox(nullptr, L"Aê! Isso é ser inteligente!", titulo, MB_OK);
} else if (ret == IDNO) {
MessageBox(nullptr, L"Tá esperando o que então? Vai lá!", titulo, MB_OK);
}
}
Vamos analisar os conceitos novos aqui, como fizemos com o programa anterior:
Na linha 5 declaro uma variável do tipo
LPCWSTR
. A diferença deLPCSTR
, que já estudamos, é este "W", de wide, para definir uma string Unicode.A linha 7 declara uma variável
ret
do tipoint
e já a inicializa com o retorno da chamada àMessageBox
.Nas linhas 12 e 15 comparo o conteúdo da variável
res
, que detém o retorno da chamada àMessageBox
. Se for igual aIDYES
, novamente uma macro, mostra uma determinada mensagem. Se for igual aIDNO
, mostra outra.
Em relação às strings, há três maneiras de se programar com a Windows API: ASCII (
CHAR
), UNICODE (WCHAR
) ou em compatibilidade (TCHAR
), que expandirá paraCHAR
ouWCHAR
, caso a macroUNICODE
esteja definida. Atualmente, é recomendado utilizarWCHAR
e textosL"assim"
.
A tabela abaixo ajuda na compreensão:
LPSTR
char\*
LPCSTR
const char\*
LPWSTR
wchar\_t\*
LPCWSTR
const wchar\_t\*
LPTSTR
char or wchar\_t dependendo da UNICODE
LPCTSTR
const char or const wchar\_t dependendo da UNICODE
Vamos fazer algo um pouco mais significativo agora. Vamos pedir ao kernel do Windows que crie um arquivo para nós.
Last updated
Was this helpful?