Ir ao conteúdo

Começando Estudar Win32 API [comandos referentes?]


Viny *-*

Posts recomendados

Postado

Ola a Todos.

Sou programador de batchfile , e estou querendo aprender um linguagem de programação "de verdade" rs .

bom , não sei praticamente nada sobre Win32 API, comecei a estudar hoje , peguei uma apostila aqui e estou começando a entender a lógica da programação em Win32 API.

Tenho algumas duvidas, são elas:

Como disse , sou programador de batchfile, e preciso começar bem do começo mesmo, então se alguem por acaso conhecer batch poderia me ajudar com alguns comandos que sejam equivalentes a alguns do batch ? por exemplo .

1.Em batch se quero armazenar uma variavel que um usuario digitar e dependendo do que ele digitar enviar ele pra algum lugar , faria assim :

set /p opc="quer mesmo fazer isso?[s/n] "

if %opc% == s (goto :sim)

if %opc% == n (goto :nao)

Neste caso precisaria de comando equivalentes a IF, GOTO , e tambem entender o processo de armazenagem de variavel.

Sei que a lógica é bem diferente de batch, mais se eu poder comparar as duas ficaria mais fácil pra min :)

2. Enquanto estudava a criação de um simples Hello World em Win32API , cheguei a seguinte duvida :

Se eu tenho uma pergunta em um MessageBox , como abaixo :


#include <windows.h>

int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)

{
MessageBox (NULL, "Tem Certeza?", "Estudando Win32 API", MB_YESNO | MB_ICONQUESTION);
return 0;
}

Sei que os botões irão retornar o valor de IDOK e IDNO , mais como definir a função de cada botão ?

Bom , por enquanto é isso ae , obrigado desde já

Postado

Olá Viny *-*!!!

Tenho conhecimento suficiente a respeito de Win32 para esclareçer sua dúvida.

1.Em batch se quero armazenar uma variavel que um usuário digitar e dependendo do que ele digitar enviar ele pra algum lugar , faria assim :

set /p opc="quer mesmo fazer isso?[s/n] "

if %opc% == s (goto :sim)

if %opc% == n (goto :nao)

Antes de mais nada gostaria de lhe esclarecer que Win32 não é uma linguagem e sim uma API, a linguagem que você está usando é C ou C++, procure estudar C/C++ antes de tentar fazer alguma coisa. Mas posso lhe adiantar alguma coisa a respeito de sua dúvida.


int a; // Nesta linha nós declaramos uma variável do tipo integer (número)

a = 10; // a agora vale 10

if (a == 10)
{
MessageBox(NULL, "Valor de A é igual a 10", "Valor de A", MB_OK);

}else{
MessageBox(NULL, "Valor de A não é igual a 10", "Valor de A", MB_ICONERROR);
}

2. Enquanto estudava a criação de um simples Hello World em Win32API , cheguei a seguinte duvida :

Se eu tenho uma pergunta em um MessageBox , como abaixo :

Código:

#include <windows.h>

int WINAPI WinMain (HINSTANCE hThisInstance,

HINSTANCE hPrevInstance,

LPSTR lpszArgument,

int nFunsterStil)

{

MessageBox (NULL, "Tem Certeza?", "Estudando Win32 API", MB_YESNO | MB_ICONQUESTION);

return 0;

}

Sei que os botões irão retornar o valor de IDOK e IDNO , mais como definir a função de cada botão ?

Ok, você já tem noção de eles vão retonar algo, a implementação da função dos botões seria relativo ao código abaixo:


#include <windows.h>

int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)

{
if (MessageBox (NULL, "Tem Certeza?", "Estudando Win32 API", MB_YESNO | MB_ICONQUESTION) == IDOK)
{
// Aqui dentro deste bloco vai ficar quando o botão retornar IDOK
}else{
// Aqui fica ao contrário, ou seja, quando retornar IDNO
}

return 0;
}

Espero que seja isso amigo, não sou programador em Win32, mas conheço alguns comandos :).

Abraços...

Meokor

Postado

Só uma correção , o retorno que especifiquei pro botão yes está errado , o correto seria IDYES, na pressa acabei escrevendo errado.

Suas dicas ajudaram bastante, muito obrigado amigo.

Mais a resposta da mensagem não funcionou muito bem aqui não .

retorna o seguinte erro :

In function `int WinMain(HINSTANCE__*, HINSTANCE__*, CHAR*, int)':

xpected primary-expression before "else"

expected `;' before "else"

*** [main.o] Error 1

Source :



int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)

{
if (MessageBox (NULL, "Tem Certeza?", "Estudando Win32 API", MB_YESNO | MB_ICONQUESTION) == IDYES);
{
MessageBox (NULL, "Pressionou YES", "YES", MB_OK | MB_ICONEXCLAMATION);
} else {
MessageBox (NULL, "Pressionou NO", "NO", MB_OK | MB_ICONEXCLAMATION);
}
return 0;
}

Estou fazendo algo errado ?

Tenho mais uma duvida tambem.

Em batch posso definir seções e ir até elas com a função goto desta maneira :

set /p sec="Escolha a seção [1,2,3]: "

if %sec% == 1 (goto :sec1)

if %sec% == 2 (goto :sec2)

if %sec% == 3 (goto :sec3)

:sec1

echo seção 1

pause

:sec2

echo seção 2

pause

:sec3

echo seção 3

pause

Existe algo como "goto" em win32 ? e se existir , como definir as seções?

ATT

EDIT : Já achei a razão do problema , tinha colokado um ; a mais.

Postado
Só uma correção , o retorno que especifiquei pro botão yes está errado , o correto seria IDYES, na pressa acabei escrevendo errado.

É e eu nem percebi. :D:D:D

Suas dicas ajudaram bastante, muito obrigado amigo.

Mais a resposta da mensagem não funcionou muito bem aqui não .

retorna o seguinte erro :

In function `int WinMain(HINSTANCE__*, HINSTANCE__*, CHAR*, int)':

xpected primary-expression before "else"

expected `;' before "else"

*** [main.o] Error 1

Source :



int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)

{
if (MessageBox (NULL, "Tem Certeza?", "Estudando Win32 API", MB_YESNO | MB_ICONQUESTION) == IDYES);
{
MessageBox (NULL, "Pressionou YES", "YES", MB_OK | MB_ICONEXCLAMATION);
} else {
MessageBox (NULL, "Pressionou NO", "NO", MB_OK | MB_ICONEXCLAMATION);
}
return 0;
}

Estou fazendo algo errado ?

Desculpe o transtorno amigo, mas por eu não ter testado o código isso aconteceu, o erro pode estar sendo causado pelo ponto e virgula (; ) no fim da linha do if. Se não for me fale onde está testando este código, dai eu posso saber melhor.

Tenho mais uma duvida também.

Em batch posso definir seções e ir até elas com a função goto desta maneira :

set /p sec="Escolha a seção [1,2,3]: "

if %sec% == 1 (goto :sec1)

if %sec% == 2 (goto :sec2)

if %sec% == 3 (goto :sec3)

:sec1

echo seção 1

pause

:sec2

echo seção 2

pause

:sec3

echo seção 3

pause

Existe algo como "goto" em win32 ? e se existir , como definir as seções?

ATT

Como já havia dito e reforço, Win32 API como o próprio nome já diz é uma API de programação, como se fosse um grupo de funções que você utiliza para programar para uma determina plataforma (No caso Windows 32 bits). A linguagem que você deve estudar para aprender a fazer if, goto, for, switch, etc é C ou C++.

Mas já adianto, faça isso:


int a;

a = 10;

if ( a == 10 ){
goto label1; // Aqui vai para label1
}else{
goto label2; // Aqui vai para label2
}

label1:
// Aqui executa o label1

labe2:
// Aqui executa o label2

Mas lembre-se em programação "de verdade" como você mesmo disse, hoje em dia existem técnicas muito mais sofisticadas do que o goto. Já não se utiliza mais este comando, apenas se você for programar em uma linguagem de baixo-nível como Assembly onde o programa já é quase montado em cima dessa estrutura.

Espero que isso resolva o sua dúvida.

Abraços...

Meokor

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...